Видел, что все пользуются субжем, а готового функционала нет. Я не супер программер, набросал то, что ниже, можно это как-то упростить? Просто загадочно - столько людей используют данный функционал, а какого-то отработанного подхода нет :(
var map;$(function() { // используется в догонку jquery, но не основополагающее ^_^map = new YMaps.Map(document.getElementById("YMapsID"));map.setCenter(new YMaps.GeoPoint(37.6175712235272, 55.75227460852835), 12);YMaps.Events.observe(map,map.Events.Click, function(map, mEvent) { placePoint(map, mEvent); });});function placePoint(map, mEvent) {var coord = mEvent.getCoordPoint();var placemark = new YMaps.Placemark(coord);var bounds = new YMaps.GeoBounds(new YMaps.GeoPoint(coord.getX()-0.04,coord.getY()-0.02 ),new YMaps.GeoPoint(coord.getX ()+0.04,coord.getY()+0.02 )); // квадрат поиска placemark.setBalloonContent('<b>Описание нашей точечки:</b> Ля ля ля');find_metro(bounds,placemark);map.addOverlay(placemark);}function find_metro(bounds,placemark) {var geocoder = new YMaps.Geocoder('станция метро', { results: 10, boundedBy: bounds, strictBounds: true});YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {if (this.length()) {addToDesc(placemark,'<br /><b>Близжайшие станции метро: </b>');for (var i=0;i<this.length();i++) {var router = new YMaps.Router([placemark.getGeoPoint(),this.get(i). getGeoPoint()]); router.metroName = this.get(i).AddressDetails.Country.Locality.Thorou ghfare.Premise.PremiseNam e.replace('метро ',''); router.metroLine = this.get(i).AddressDetails.Country.Locality.Thorou ghfare.ThoroughfareName; YMaps.Events.observe(router, router.Events.Success, function () {addToDesc(placemark,'<br />'+this.metroName+', '+this.metroLine+', ~'+(this.getDistance()/1000).toFixed(3)+'км');});}}});}function addToDesc(placemark,str) {placemark.setBalloonContent(placemark.getBalloonCo ntent()+str); }
Пример тут: ссылка
Может кто знает более изящное решение?
Попутно вопрос: написал рекурсивную функцию по выцеплению всех станций метро, как часто можно её прогонять? Раз в недельку, для сверки актуальности базы можно?