Клуб API Карт

Как дождаться определения координат?

eugeny.kagarlitsky
19 ноября 2010, 18:21
Хочу сначала получить координаты адреса который ввел, а потом его использовать для определения дистанции к моим объектам. Но получается, что событие определения координат происходит позже, чем вывод моих объектов. 
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);         
map.setCenter(new YMaps.GeoPoint(<?php echo $_COOKIE['town'] ?>), 10);
map.addControl(new YMaps.TypeControl());
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.MiniMap());
map.addControl(new YMaps.Zoom());
<?php if ($street): ?>
var xy = 0;
var geocoder = new YMaps.Geocoder("<?php echo $_COOKIE['tName']." ".$street ?>");
YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
xy = geocoder.get(0).getGeoPoint(); // получаю координаты
}); 
<?php endif; ?>
<?php foreach ($rows as $row): ?>
var s = new YMaps.Style();
s.iconStyle = new YMaps.IconStyle();
s.iconStyle.href = "images/icon/<?php echo $row->icon_file ?>";
s.iconStyle.size = new YMaps.Point(24, 24);
s.iconStyle.offset = new YMaps.Point(-12, -12);
<?php if ( $street): ?>
var sys = new YMaps.GeoCoordSystem();
var len = sys.distance(new YMaps.GeoPoint(<?php echo $row->lon.",".$row->lat ?>),new YMaps.GeoPoint(xy)); // использую координаты, но их еще как-бы нету, в этом и проблема ...       
<?php endif; ?>                  
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(<?php echo $row->lon.",".$row->lat ?>), {style: s} );
map.addOverlay(placemark);
<?php endforeach; ?>
});
PS: есть мысль создать еще одну мнимую карту, где получить координаты, записать их в глобальную javascript'овскую переменную, а уже потом выводить нормальную карту, но мне это кажется неправильным решением ... также пробовал while'ом ждать, тоже не помогло ...  
3 комментария
Подписаться на комментарии к посту
Добавлять плэйсмарки в обработчике ответа геокодера.

YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
xy = geocoder.get(0).getGeoPoint(); // получаю координаты
                                build();

});

function build() {
  
   ...
}

Кстати, расстояние между точками можно мерить, не создавая нового экземпляра GeoCoordSystem:

var len = map.coordSystem.distance(...
eugeny.kagarlitsky
19 ноября 2010, 19:03
Спасибо! помогло (B) как-то вечером в пятницу туго идет (а решение то простое ...) , главное не забыть передать функции саму карту и координаты ... 
Я через точку делаю:
var len = point1.distance(point2)