Skip to content

Instantly share code, notes, and snippets.

@persidskiy
Last active May 17, 2018 12:01
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save persidskiy/5788975 to your computer and use it in GitHub Desktop.
Save persidskiy/5788975 to your computer and use it in GitHub Desktop.
function getHumanAddress(geoObject){
var declaration = {
'CountryName': 'country',
'AdministrativeAreaName': 'area',
'SubAdministrativeAreaName': 'subarea',
'LocalityName': 'city',
'DependentLocalityName': 'subcity',
'ThoroughfareName': 'street',
'PremiseNumber': 'house'
}
,parseParams = ['Country', 'CountryName', 'AdministrativeArea', 'AdministrativeAreaName',
'Locality', 'LocalityName', 'Thoroughfare', 'ThoroughfareName', 'Premise', 'PremiseNumber',
'DependentLocality', 'DependentLocalityName',
'SubAdministrativeArea', 'SubAdministrativeAreaName']
,level = geoObject['metaDataProperty']['GeocoderMetaData']['AddressDetails']
,result={}
,nextLevel;
while(1){
var goDeeper = false;
for(var key in level){
if(parseParams.indexOf(key)!==-1){
if(typeof level[key] === 'object'){
nextLevel = level[key];
goDeeper = true;
}else{
for(var declKey in declaration){
if(declKey === key){
result[declaration[key]] = level[key];
}
}
}
}
}
if(goDeeper){
level = nextLevel; //we need to go deeper ;)
}else{
break;
}
}
return result;
}
@NeXTs
Copy link

NeXTs commented Jul 22, 2013

Что парсит DependentLocalityName ?

Оно мне ломает определение города в Одессе, я так понимаю ты ориентировался на Россию когда писал эту функцию? В Украине чтото отличается.

Проверь координаты 46.42876,30.745010999999998
в city записывает "Киевский район" - это район а не город. Если убрать DependentLocalityName то все становится хорошо, но боюсь это ломает определение гдето в другом месте. Будут идеи?

А так функция годная, если учесть все нюансы - многим пригодится.

@persidskiy
Copy link
Author

Да, у меня в declaration было настроено что DependentLocalityName перезаписывал city. Этот алгоритм непрвильный.

Поправил, теперь city это LocalityName, а subcity это DependentLocalityName.

@SilantevAlex
Copy link

Подскажите как подключить функцию пожалуйста!!
У меня есть результат геокодирования:
ymaps.geocode(coords).then(function (res) {
var firstGeoObject = res.geoObjects.get(0);
}

Что мне подавать на вход функции?
Сейчас беру значения вот так: firstGeoObject.properties.get('metaDataProperty. ...');
Можно ли как-то перемещаться по структуре свойств вверх вниз не подскажите?

@whaleinvasion
Copy link

если кому интересно будет, конвертировал в php

https://gist.github.com/sternt/56d34537ede80d854af866fa1fae1046

@whaleinvasion
Copy link

getHumanAddress(firstGeoObject.properties._data);
вот это нужно передавать в функцию что бы заработало

@dimik
Copy link

dimik commented Feb 9, 2017

Парсер уже есть в самом АПИ

ymaps.geocode(address).then(function (res) {
  var firstGeoObject = res.geoObjects.get(0);
  console.log(firstGeoObject.getLocalities());
});

@maxner
Copy link

maxner commented Nov 13, 2017

Огромное спасибо!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment