-
-
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; | |
} |
Да, у меня в declaration было настроено что DependentLocalityName перезаписывал city. Этот алгоритм непрвильный.
Поправил, теперь city это LocalityName, а subcity это DependentLocalityName.
Подскажите как подключить функцию пожалуйста!!
У меня есть результат геокодирования:
ymaps.geocode(coords).then(function (res) {
var firstGeoObject = res.geoObjects.get(0);
}
Что мне подавать на вход функции?
Сейчас беру значения вот так: firstGeoObject.properties.get('metaDataProperty. ...');
Можно ли как-то перемещаться по структуре свойств вверх вниз не подскажите?
если кому интересно будет, конвертировал в php
https://gist.github.com/sternt/56d34537ede80d854af866fa1fae1046
getHumanAddress(firstGeoObject.properties._data);
вот это нужно передавать в функцию что бы заработало
Парсер уже есть в самом АПИ
ymaps.geocode(address).then(function (res) {
var firstGeoObject = res.geoObjects.get(0);
console.log(firstGeoObject.getLocalities());
});
Огромное спасибо!
Что парсит DependentLocalityName ?
Оно мне ломает определение города в Одессе, я так понимаю ты ориентировался на Россию когда писал эту функцию? В Украине чтото отличается.
Проверь координаты 46.42876,30.745010999999998
в city записывает "Киевский район" - это район а не город. Если убрать DependentLocalityName то все становится хорошо, но боюсь это ломает определение гдето в другом месте. Будут идеи?
А так функция годная, если учесть все нюансы - многим пригодится.