Поиск по карте

Как это работает?

Для кнопки “Показать метку” назначена процедура:

Функция для получения текста HTML:

Все экспортные функции и процедуры обработки описаны вспомогательными комментариями, поэтому будет легко догадаться о назначении параметров. 
Функция “ДобавитьМетку” добавляет на карту метку с описанием.
Если необходимо на одной карте показать сразу несколько меток, то функцию  “ДобавитьМетку” нужно вызывать несколько раз.
Для отображения результата составленного текста HTML используется процедура “ПоказатьНаКартеНаКлиенте”.

При выполнении этой процедуры в первый раз — появится окно с выбором программы-браузера. После выбора — откроется окно с картой.

Термины и определения

База данных — базы данных, представленные географическими информационными системами (ГИС) «Яндекс.Карта на территорию Российской Федерации», «Яндекс.Карта на территорию СНГ (Украина, Беларусь, Казахстан, Грузия, Абхазия, Южная Осетия, Армения, Азербайджан, Молдова, Эстония, Латвия, Туркменистан, Таджикистан, Узбекистан, Кыргызстан)», «Яндекс.Карта на территорию Турции», «Яндекс.Карта на территорию Франции», правообладателем которых является Яндекс.

Геокодер — программа для ЭВМ, функциональное назначение которой заключается в определении координат и получении сведений об объекте по его названию или адресу, а также определении адреса объекта на карте по его координатам (обратное геокодирование).

Запрос — обращение к функциям геокодирования, маршрутизации и показа панорам в Комплексе Программ. При этом, одно обращение к любой функции Комплекса программ, в частности, Геокодера и/или Маршрутизатора, за исключением функции показа панорам, равно одному Запросу, а одно обращение к функции показа панорам приравнивается к пяти Запросам.

Комплекс Программ — представляет собой совокупность программ для ЭВМ JavaScript API Яндекс.Карты, Геокодер, Маршрутизатор, Плеер панорам.

Маршрутизатор — программа для ЭВМ, функциональное назначение которой заключается в построении маршрутов между разными координатами и/или точками на карте, с учетом пробок и без. При этом, доступ к Маршрутизатору по модели «клиент – сервер» позволяет получать данные о маршрутах на автомобиле, общественном транспорте и пешеходные маршруты, а доступ к Маршрутизатору по модели «сервер – сервер» позволяет получать данные только о маршрутах на автомобиле.

Плеер панорам — программа для ЭВМ, функциональное назначение которой заключается в отображении сферических панорам на страницах сайта. Программа позволяет отображать как панорамы Яндекса, так и собственные сферические панорамы Лицензиата.

Лицензии и тарифы

Для продукта «JavaScript API и Геокодер» доступны два вида лицензии: стандартная и расширенная. Разница между ними заключается в следующем: в стандартной лицензии запрещается сохранять или изменять данные, полученные через API. В расширенной лицензии это ограничение снято.

Стоимость лицензий зависит от количества запросов, которые сайт будет отправлять к API.

Внимание. Обратите внимание, лицензия на продукт приобретается на год (кроме специальных месячных тарифов, указанных в таблице ниже)

Внести оплату на меньший срок нельзя. Кроме того, предоплата невозможна — вы сможете начать использовать API только после того, как внесете полный минимальный платеж.

Advanced Model Configuration

You are not stuck with the and database column names (with ActiveRecord) or the array (Mongo) for storing coordinates. For example:

For reverse geocoding, you can specify the attribute where the address will be stored. For example:

To specify geocoding parameters in your model:

Supported parameters: , , , and . You can specify an anonymous function if you want to set these on a per-request basis. For example, to use different lookups for objects in different regions:

Custom Result Handling

So far we have seen examples where geocoding results are assigned automatically to predefined object attributes. However, you can skip the auto-assignment by providing a block which handles the parsed geocoding results any way you like, for example:

Every object, , provides the following data:

  • — float
  • — float
  • — array of the above two in the form of
  • — string
  • — string
  • — string
  • — string
  • — string
  • — string
  • — string

Most APIs return other data in addition to these globally-supported attributes. To directly access the full response, call the method of any Geocoder::Result object. See the API Guide for links to documentation for all geocoding services.

Forward and Reverse Geocoding in the Same Model

You can apply both forward and reverse geocoding to the same model (i.e. users can supply an address or coordinates and Geocoder fills in whatever’s missing) but you’ll need to provide two different address methods:

  • one for storing the fetched address (when reverse geocoding)
  • one for providing an address to use when fetching coordinates (forward geocoding)

For example:

The same goes for latitude/longitude. However, for purposes of querying the database, there can be only one authoritative set of latitude/longitude attributes for use in database queries. This is whichever you specify last. For example, here the attributes without the prefix will be authoritative:

Batch Geocoding

If you have just added geocoding to an existing application with a lot of objects, you can use this Rake task to geocode them all:

If you need reverse geocoding instead, call the task with REVERSE=true:

In either case, it won’t try to geocode objects that are already geocoded. The task will print warnings if you exceed the rate limit for your geocoding service. Some services enforce a per-second limit in addition to a per-day limit. To avoid exceeding the per-second limit, you can add a option to pause between requests for a given amount of time. You can also load objects in batches to save memory, for example:

To avoid exceeding per-day limits you can add a option. However, this will ignore the value, if provided.

Format for geographical coordinates in the request

Geographical coordinates in the parameter are set sequentially in one of the following formats:

Record format Order of coordinates Example
+-float, +-float Longitude, latitude 134.854, -25.828

float , float *

Any E134.854, S25.828

134.854E, 25.828S

+-deg° mm’ ss», +-deg° mm’ ss» Latitude, longitude -25°49′41.1″, 134°51′15.88″
deg° mm’ ss» , deg° mm’ ss» * Any 25°49′41.1″S, 134°51′15.88″E
NMEA Any 2549.67,S, 13451.26,E

* — The letter designation of one of the four directions: N, E, W, S. Spaces are allowed between letters and coordinates

Spaces, commas, or semicolons can be used as delimiters. Spaces are allowed on either side of the delimiter character.

Результат

Воспользуемся всё тем же osmconvert, в котором предусмотрен вывод в CSV

Из параметров стоит заострить внимание на колонки и из каких тегов вставляется в них информация

@id addr:street addr:housenumber @lat @lon
1000000147959515 улица Масалова 25А 51.6522509 36.0337820
1000000147960436 Школьная улица 71 51.6546536 36.0139438
1000000147965426 улица Котова Гора 1 51.7337383 36.1837660

Ну вот, это уже какие-то да геоданные и их можно вставить в ГИС и как-то проанализировать, что и видно на представленной в начале картинке.

Но тема не ограничивается только адресами. На втором шаге можно оставить например остановки общественного транспорта и визуализировать транспортную доступность. Впрочем это уже совершенно из другой статьи…

Geocoding HTTP Requests

Geocoder adds and methods to the standard object so you can easily look up the location of any HTTP request by IP address. For example, in a Rails controller or a Sinatra app:

The method is vulnerable to trivial IP address spoofing via HTTP headers. If that’s a problem for your application, use instead, but be aware that will not try to trace a request’s originating IP through proxy headers; you will instead get the location of the last proxy the request passed through, if any (excepting any proxies you have explicitly whitelisted in your Rack config).

Note that these methods will usually return in test and development environments because things like «localhost» and «0.0.0.0» are not geocodable IP addresses.

Как собрали базу координат и адресов

Формируем из OSM-тегов полные адреса́.

  • addr:city — д. Булатниково;
  • addr:street — Центральная улица;
  • addr:housenumber — 103.

д. Булатниково, Центральная улица, 103Прогоняем каждый новый адрес через API стандартизации «Дадаты».

  • исправляет опечатки;
  • расшифровывает сокращения вроде «НиНо» и «Мск»;
  • меняет старые названия на новые;
  • находит по индексу пропущенный в адресе город;
  • определяет ФИАС-код.
До стандартизации После
д. Булатниково, Центральная улица, 103

142718, Московская обл, Ленинский р-н, с Булатниково, ул Центральная, д 103.

ФИАС-код — a8b6a52f-e96d-4ec3-a0ff-641013ab0445

Адрес ФИАС ID Широта Долгота
142718, Московская обл, Ленинский р-н, с Булатниково, ул Центральная, д 103 a8b6a52f-e96d-4ec3-a0ff-641013ab0445 55.558773 37.667103
119034, г Москва, пер Турчанинов, д 6 стр 2 8c925e61-9173-48b3-999e-dc85c86d89e7 55.737096 37.597190

Разбираем адреса, которые «Дадата» не стандартизовала.

  1. Адрес пришел не в положенных тегах выгрузки OSM, а черт знает где. Встречали и вовсе не заполненные адресные теги, и город в теге улицы, и еще много всего.
  2. В OSM лежит экзотический объект вроде детской площадки, вузовского футбольного поля или вовсе кладбища. В ФИАС ничего такого нет, да и для наших целей эти результаты не годятся. Такие объекты просто отсеиваем.
  3. Ошибка — и не ошибка вовсе. Например, из OSM пришел район города, которого в ФИАС нет. Или в ОSМ объект находится в населенном пункте, а в ФИАС этот населенный пункт присоединили к городу и удалили. Тогда мы допиливаем алгоритм под загруженные данные и запускаем снова.

Распарсили выгрузку, а там — путаница в тегахПроверяем, насколько адекватны загруженные координаты.GeoJSONКЛАДР-код — это уникальный идентификатор, который использовали еще до появления ФИАС. Находить этот код для адреса умеет миллион сервисовЕще раз, построже, проверяем загруженные координаты домов.

  1. Берет адрес нового дома и находит для него соседей в эталонном справочнике.
  2. По координатам считает расстояние между непроверенным новым домом и надежными соседними.

Соседей найти несложно: 1. Берем новый дом и находим ФИАС ID родителя. 2. Выбираем из эталонного справочника дома́, у родителей которых тот же ФИАС ID№ 1, 2 и 3улице Коммунаров№ 5, 6 и 7№ 5№ 1, 2 и 3№ 6 и 7

  • дома, прошедшие обе проверки: на полигоны и на соседей, добавляем в эталонный справочник;
  • если объект не попадает в полигон, новые данные не подходят. То же самое, если расстояние между домом и соседями слишком велико;
  • дома, у которых нет соседей, мы пока откладываем. Они лежат в отдельной базе, когда-нибудь разберем.

Делим прошедшие проверку объекты на две части.В первой таблице — все объекты c ФИАС ID до домов: регионы, населенные пункты, улицы. Во второй — дома́ и ссылка на родителя из первой таблицы

  • в одну таблицу собираем адресные объекты до дома, у каждого из них свой ФИАС-код;
  • во вторую — только дома́, при этом ссылаясь на родителя в первой таблице.

ФИАС ID родителя + номер домаСправочник готов, осталось протестировать.

Параметры геоссылки

Геоссылке могут быть заданы различные параметры, например область поиска. Параметры задаются в атрибутах HTML-элемента, в котором определена геоссылка. Могут быть заданы следующие параметры:

— тип объекта, который нужно показать на карте. Может принимать одно из двух значений: «geo» (географический объект) и «biz» (организация). Если параметр не задан, то по умолчанию используется тип «geo». Если для типа «geo» не было найдено ни одного объекта, то будет использоваться тип «biz»

Обратите внимание, одновременное задание двух значений «geo» и «biz» не допускается. — границы географической области, в которой находится искомый объект

Границы задаются координатами левого нижнего и правого верхнего углов области. Координаты указываются в последовательности «широта, долгота». Например, . Данный параметр рекомендуется указывать, если в геоссылке задан неполный адрес объекта, например без указания города или области («ул. Ленина»).

— поясняющий текст, который будет отображен в шапке всплывающего окна (см. иллюстрацию ниже). Если не указывать этот атрибут, то в шапке будет отображаться адрес объекта. Обратите внимание, что размеры текстового поля ограничены — в поле помещаются только первые 3 строки. Оставшуюся часть текста пользователь не увидит.

Примечание. Все атрибуты являются необязательными.


Скопировано

Error Handling

By default Geocoder will rescue any exceptions raised by calls to a geocoding service and return an empty array. You can override this on a per-exception basis, and also have Geocoder raise its own exceptions for certain events (eg: API quota exceeded) by using the option:

You can also do this to raise all exceptions:

The raise-able exceptions are:

Note that only a few of the above exceptions are raised by any given lookup, so there’s no guarantee if you configure Geocoder to raise that it will actually be raised under those conditions (because most APIs don’t return 503 when they should; you may get a instead). Please see the source code for your particular lookup for details.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector