Клуб API Карт

Изменение вывода геокодера

nastudio
7 февраля 2011, 16:04
Интересует, как изменить результат, который показывается на карте. Т.е. он выводит длинную строку типа, Россия, Новосибирская область, Новосибирск, улица Лаврова, 12 . А надо оставить только Новосибирск, улица Лаврова, 12 либо только улицу и дом. Объясните, как это сделать. Для геокодинга использую сл.:
 var value="Новосибирск, Улица, Дом";
// Удаление предыдущего результата поиска
map.removeOverlay(geoResult);

// Запуск процесса геокодирования
var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});

// Создание обработчика для успешного завершения геокодирования
YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
// Если объект был найден, то добавляем его на карту
// и центрируем карту по области обзора найденного объекта
if (this.length()) {
geoResult = this.get(0);
map.addOverlay(geoResult);
map.setBounds(geoResult.getBounds());
map.zoomBy(7, {smooth:true});
}else {
alert("Ничего не найдено")
}
});
// Процесс геокодирования завершен неудачно
YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
alert("Произошла ошибка: " + error);
});
16 комментариев
Подписаться на комментарии к посту
Можно взять и разобрать geoResult например, а конкретно AddressDetails. Там есть отдельно и страна, и район, и улица и прочее..

хм... у меня проблема возникает такого типа. Пытаюсь сделать следущее:


 



var placemark = new YMaps.Placemark(new YMaps.GeoPoint(this.get(0).getCoordPoint()));
placemark.name = "Имя метки";
placemark.description = "Описание метки";
map.addOverlay(placemark);

 но метка не создается. т.е. я так понимаю, ей не передаются координаты или что то типа того... хз вообщем, если руками прописать те координаты, которые вернет this.get(0).getCoordPoint() - то все норм, а если подставляем - то пусто.

 

Правильно или нет, но можно так


geoResult = this.get(0);
var point_coord = geoResult._point;
var point_lat = point_coord.__lat;
var point_lng = point_coord.__lng;
Это я про определение координат...

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


А вот с выводом на нее значений - что то я не совсем разобрался. Не подскаже подробнее, как работать с AddressDetails? чтобы разобрать результат и вывести нужное мне?

как то так


geoResult.AddressDetails.Country.CountryName
geoResult.AddressDetails.Country.CountryNameCode
geoResult.AddressDetails.Country.Locality.LocalityName
geoResult.AddressDetails.Country.Locality.Thoroughfare.Premise.PremiseNumber
geoResult.AddressDetails.Country.Locality.Thoroughfare.ThoroughfareName

geoResult.AddressDetails.Country.CountryName - вернул Россия


а вот geoResult.AddressDetails.Country.Locality.LocalityName - ничего не выведит, а FierFox в консоли пишет, что



Ошибка: geoResult.AddressDetails.Country.Locality is undefined

 С чем это может быть связанно?

 

Ну я примерно написал...может и не именно так...
если есть FireBug у вас (в FireFox-е например), то сами сможете отследить все это, встав на точку после

geoResult = this.get(0);

FireBug есть, только не совсем понял, что значит



то сами сможете отследить все это, встав на точку после

 И как это вообще сделать? 

 

На вкладке "Сценарий" выбираете исследуемый js скрипт..находите нужную функцию, или обработчик события. ставите точку останова и трассерите....

Немного поискав, всетаки нашел ответ))) То, что Вы предоставили - это для Москвы, а для других городов нужно использовать следущее:



geoResult.AddressDetails.Country.AdministrativeArea.Locality.Thoroughfare.ThoroughfareName

это, чтобы получить например улицу.

 

педальные свойства лучше не использовать
есть методы
getLat()
getLng()
и
toString()
Это наверное и правда так, ибо наверняка эти "педальные" свойства еще и меняются постоянно...
да, именно по этой причине на них лучше не завязываться
 ну а placemark как то так....

var s_to = new YMaps.Style();
var s_to_templ = "тут диз описываете";
s_to.iconStyle = new YMaps.IconStyle();
s_to.iconStyle.href = путь до картинки например;
s_to.iconStyle.size = new YMaps.Point(25, 25);
s_to.iconStyle.offset = new YMaps.Point(-10, -30);
placemark_to = new YMaps.Placemark(new YMaps.GeoPoint(point_to_lng,point_to_lat),{style:s_to});
placemark_to.image = "";
placemark_to.description = desc_point_to;
var objManager_to = new YMaps.ObjectManager();
map.addOverlay(objManager_to);
objManager_to.add(placemark_to);

 
new YMaps.Placemark(new YMaps.GeoPoint(this.get(0).getCoordPoint()));

Конструктор new YMaps.GeoPoint лишний, getCoordPoint и так возвращает геоточку. Достаточно new YMaps.Placemark(this.get(0).getCoordPoint());

Должен заметить, что this.get(0) - это и так плэйсмарк, можно работать с ним напрямую, не создавая копий.