Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/osll/op-fast-opendata-search


https://github.com/osll/op-fast-opendata-search

Last synced: 6 days ago
JSON representation

Awesome Lists containing this project

README

        

# op-fast-wikidata-search
Эта утилита работает с открытыми данными по Санкт-Петербургу в формате csv-таблиц, размещенными на сайте http://data.gov.spb.ru/. Она анализирует файлы с музеями и достопримечательностями.

Компиляция утилиты осуществлется с помощью подключения в командной строке директории, которая содержит исходный код и выполнения команды make. Дальнейший запуск осуществляется командой:
`./opendata_search.out <ключи>`. Формат ключа **-key**, далее через пробел передается значение ключа, например `-geosearch 30.624,59.895,65`.
**Поддерживаемые ключи: _-file, -search, -geosearch, -limit, -complexsearch_, -complexgeosearch.**

Файлы для поиска передаются в утилиту с помощью ключа **-file**:
`./opendata_search.out -file test_data.csv`
Если файл не задан явно, поиск осуществляется в файлах по умолчанию (*./data/data-museums.csv и ./data/data-sights.csv*). Сначала загружается файл с музеями, потом - с достопримечательностями.

Утилита имеет искать файлы по фрагменту названия, описания или исторической справки.
Для использования этой функции вызовите утилиту с ключом **-search <фрагмент>**.
Например, следующий запуск: `./opendata_search.out -search памятник` вернет все объекты, содержащие слово *"памятник"* в названии, описании или исторической справке. Если в поисковом запросе содержится несколько слов, необходимо заключить запрос в двойные кавычки, например **-search _"Аничков дворец"_**.

Также утилита умеет искать объекты по заданным координатам и радиусу поиска, задаваемому в метрах.
Следующая команда: `./opendata_search.out -geosearch 56.389,30.689,4000` вернет объекты, находящиеся в радиусе 4 километров от точки с координатами 56.389, 30.689 (в долях градусов), напечатав их название, адрес и расстояние от заданной точки.
Обратите внимание, что разделителем является знак запятой, пробелы между координатами, радиусом не допускаются!

Утилита использует специальный ключ **-limit** для работы в режиме ограниченной памяти. Ключ limit ограничивает количество десериализованных объектов, которые могут одновременно хранится в оперативной памяти компьютера.
Пример использования: `./opendata_search.out -limit 50` - количество хранящихся в памяти объектов не будет превышать 50 в любой момент исполнения.

В утилите присутствует ключ **-complexsearch** для специального режима поиска по полям объектов. В этом режиме перед выполнением поиска все культурные объекты преобразуются в несколько коллекций (по одной коллекции на каждое из полей для поиска - имя, адрес, описание и историческая справка): `std::map>`, где ключами являются все слова, содержащиеся в поле объекта (например, для строки *"Невский пр-т, д.37"* такими словами будут *"Невский"*, *"пр-т,"* и *"д.37"*), а значением - массив (вектор) указателей на объекты, которые содержат это слово в заданном поле. После такого преобразованияполученный поисковый запрос разбивается на слова по пробельному символу и осуществляется быстрый поиск по добавленным ключам. Пример вызова: `./opendata_search.out -complexsearch "Меншиковский дворец"`. Поиск в этом режиме не поддерживает ключ **-limit**, а также, если был получен поисковый запрос с ключом **-search**, то он будет сброшен и перезаписан запросом **-complexsearch**.

Последний из ключей, распознаваемых утилитой - **-complexgeosearch**. Формат вызова и результат совпадает с вызовом _-search_, но утилита перед поиском разбивает город на квадраты с размером стороны **1000 метров**, и далее получает список квадратов, граничащих с переданной точкой, и осуществляет поиск только в них. Обратите внимание, что в этом режиме карта города ограничена территорией Санкт-Петербурга, и поиск за его пределами (например, в Ленинградской области) в общем случае не будет осуществляться.

Утилита поддерживает комбинации ключей **(-file, -search** и **-limit)**; **(-file, -geosearch** и **-limit)**; **(-complexsearch** и **-geosearch)**.
При вызове -search и -geosearch одновременно будут последовательно найдены сначала объекты, поля которых совпадают с полученным объектом, а затем - будут найдены объекты по координатам.
При этом, если был использован также ключ **-limit **, результаты будут выводится на печать последовательно и порционно:
сначала поиск по полям N объектов, затем поиск по координатам N объектов, и так далее до конца файла.

Утилита начинает свою работу сразу после вызова ее в комнадной строке, найденные объекты распечатываются в стандартный консольный вывод непосредственно после обнаружения совпадений. Во время чтения файла, а также преобразования файлов в структуру вектора карт в случае вызова утилиты с ключом **-complexsearch** в консоли отображается простой прогресс-бар, показывающий прогресс в процентах от количества требуемых объектов, которые нужно считать или преобразовать. Во время исполнения программы результаты выводятся на печать незамедлительно в случае нахождения объектов, поэтому прогресс-бар на этом этапе не предусмотрен.