Клуб API Карт

Неточный ответ геокодера при обратном геокодировании

KDV
14 марта 2013, 12:11

Запрашиваю адрес используя типовой запрос:

http://geocode-maps.yandex.ru/1.x/?format=json&results=1&geocode=долгота,широта

 Очень часто в черте города возвращается "GeocoderMetaData":{"kind":"street"} т.е. определяется адрес с точностью до улицы, хотя точка находится буквально в паре метров от дома на данной улице, разумеется ожидаю получить "kind":"house" с нормальным адресом город, улица, № дома ибо сама улица порой длиной на несколько км и такое крайне неточное определение адреса напрягает.

Неужто нельзя в данном случае возвращать адрес с номером БЛИЖАЙШЕГО дома, если он находится в радиусе скажем 100м от запрашиваемой точки по координатам ?

 Если для API Яндекс.Карт это крайне сложно и долго реализовать, хотя это довольно распространенная практика возвращать именно ближайший объект ибо дом это все-таки не 1 пиксел на карте, то хотябы подскажите каким образом запросить скажем координаты домов на улице, тогда уж своими средствами найду ближайший.

Заранее спасибо и надеюсь на оперативное решение или альтернативу.

Однако следует учесть, что адрес в большом городе с точностью до улицы - это пальцем в небо и с этим надо что-то делать.

19 комментариев
Подписаться на комментарии к посту

см. параметр kind

Указание &kind=house 

должно помочь

Cпс за совет, примерно в 50% случаев помогло(когда в ответе kind=street), но проблема в том, что если указать явно &kind=house, а по указанным координатам нет никаких домов, то возвращется нулевой результат, что недопустимо ибо как минимум нас.пункт определяется верно.

Т.е. задача определить максимально возможный уровень kind, а не только "все или ничего".

PS Пока что поставил временную заглушку-триггер на случай возврата в ответе геокодера kind=street делать еще 1 запрос &kind=house, но это костыль и лишний запрос...

PPS Оффтоп. Куча пустых строк автоматич добавляющаяся в конце каждого поста напрягает уже!

 

 

У каждого типа kind есть своя максимальная поисковая область (spn) дальше которой он искать не будет.

Если вы этот параметр не указали, попробуйте указать, - не факт что область по-умолчанию = максимальной. Скорее она меньше.

Я где-то выкладывал в клубе эти максимальные значения, можно попробовать найти их через поиск.

 

 

PPS Оффтоп. Куча пустых строк автоматич добавляющаяся в конце каждого поста напрягает уже!

Вы можете удалить их руками, при редактировании поста.

К сожалению использование Я.ру, в качестве движка этого клуба, это данность с которой нам всем приходится жить.

Сделать мы ничего не можем, т.к. этот проект сейчас заморожен и не развивается

По параметру kind я так-то решил проблему при помощи дополнительного запроса ибо в т.ч. и spn крайне сложно предугадать на просторах нашей необъятной ибо это может быть пустошь, а может центр нерезиновой... должна быть универсальность какая-то.. вот ее 2мя запросами получается можно достичь, а не 1м.

PS Именно вручную пустые строки и удаляю, постоянно редактировать приходится для их удаления - поэтому и написал, что напрягает(также как и отсутствие возм.свои темы старые найти). Быть может имеет смысл чтото готовое тогда установить? где уже все это есть - типа форума какого-нить коль так сложно пофиксить...просто мысль ибо качество сапппорта страдает от неудобного для поиска ситуаций интерфейса.

и еще чуть не забыл, проверьте геокодер по координатам:

широта 59.939037 долгота 30.315784

возвращается kind = other (Дворцовая площадь, Санкт-Петербург, Россия) хотя по факту это просто дефолтные координаты Питера по GeoIP и kind явно косячный возвращается.

дайте полный урл

кажется это и правда Дворцовая площадь 

Вы кажется не поняли суть ошибки.

Для начала как я уже говорил неопределенный kind=other по которому сложно классифицировать объект.

Во-вторых эти координаты используются повсеместно в GeoIP как координаты центра Питера, т.е. это указатель не на площадь, а на сам Питер и kind=locality более верный в конкретно данном случае.

 

 

 

 

Ошибки я тут не вижу

То что эти координаты используются в GeoIP или еще где-то ничего не значит.

Координаты указывают на дворцовую площадь, 

которая по классификации геокодера попадает под other.

Если Вы укажете параметр kind=locality, наверняка получите Санкт-Петербург

А как задать spn в js-функции?

ymaps.geocode(coords, { kind: 'house', ...

 

А так же, как получить улицу, дом, корпус в виде массива, а не строкой

res.geoObjects.get(0).properties.get('name')... ?

речь в посте про http-геокодер

там он задается в параметре spn

 

Вы можете получить все данные ввиде объекта и выбрать нужное:

console.log(res.geoObjects.get(0).properties.getAll());

 

Было бы всё так просто, не спрашивал бы. Возьмем какой-нибудь адрес в Питере. Нужная нам информация, содержится в

metaDataProperty.GeocoderMetaData.AddressDetails.Country.Locality


Улица: .Thoroughfare.ThoroughfareName: набережная реки Мойки

Дом: .Thoroughfare.Premise.PremiseNumber: 48к2

(номер корпуса входит в номер дома, ну да ладно)

 

Теперь возьмем соседний адрес:

Район: .DependentLocality.DependentLocalityName: Адмиралтейский район

Улица: .DependentLocalityName.Thoroughfare.ThoroughfareName: Казанская улица

Дом: .DependentLocalityName.Thoroughfare.Premise.PremiseNumber: 5

 

Появился район, из-за чего сбился путь. Хуже всего, что район почему-то не присутствует в большей части адресов, хотя тот же Питер четко поделен на районы и никакого смысла в отсутсвии этой информации нет.

 

То что речь про http-геокодер понимаю, но спраниваю о js-геокодере. С ним такая же проблема. щёлкунув в центр Невы, получу ошибку и объект properties просто не будет существовать. Хотя определить расположение с точностью до района точно можно.

 

Поэтому дополню вопрос: как 100% определить район по координатам?

100% ничего никогда не бывает.

Где-то есть данные о районе где-то их нет.

Если Вам нужен район попробуйте запрашивать с параметром

&kind=district

Так и делаю. Получается, что для получения полной информации о коордитнатах, нужно их геокодировать с разной степенью точности, а потом анализировать полученные данные и уже составлять адрес. Не очень удобно.

 

Можно где-нибудь посмотреть описание полей properties геообъекта? Чтобы узнать что из них деревня, что муниципальный округ и т.п. И, вообще, узнать, как формируется этот объект, чтобы не гадать на кофейной гуще.

Описание схемы ответа есть в документации

Стандарт xAl описан тут

То что надо! А в АПИ есть функция для получения, например, конкретного номера дома из ответа, не зависимо от того входит ли он в район или МО или не входит. Т.е. не зависимо от структуры данных?

 

Могла бы выглядеть так: res.geoObjects.get(0).properties.get('ThoroughfareNumber')

P.S. Можно производить обратное геокодирование на основании народной карты? Пробовал указывать provider: 'yandex#publicMap' — не работает.