Клуб API Карт

Заменить координаты адресами

Пост в архиве.
inline-meta-ua
16 июля 2012, 18:12

Есть такая карта 

<!-- Этот блок кода нужно вставить в ту часть страницы, где вы хотите разместить карту (начало) -->
<div id="ymaps-map-id_134244682198520393870" style="width: 584px; height: 403px;"></div>
<div style="width: 584px; text-align: right;"><a href="http://api.yandex.ru/maps/tools/constructor/?lang=ru-RU" target="_blank" style="color: #1A3DC1; font: 13px Arial,Helvetica,sans-serif;">Создано с помощью инструментов Яндекс.Карт</a></div>
<script type="text/javascript">
function fid_134244682198520393870(ymaps) {
var map = new ymaps.Map("ymaps-map-id_134244682198520393870", {
center: [49.131414000000014, 55.77904802324896],
zoom: 16,
type: "yandex#map"
});
map.controls
.add("zoomControl")
.add("mapTools")
.add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));
map.geoObjects
.add(new ymaps.Placemark([49.217787, 55.743791], {
balloonContent: "1"
}, {
preset: "twirl#lightblueDotIcon"
}))
.add(new ymaps.Placemark([49.131414, 55.778335], {
balloonContent: "2"
}, {
preset: "twirl#lightblueDotIcon"
}));
};


</script>
<script type="text/javascript" src="http://api-maps.yandex.ru/2.0/?coordorder=longlat&load=package.full&wizard=constructor&lang=ru-RU&onload=fid_134244682198520393870"></script>
<!-- Этот блок кода нужно вставить в ту часть страницы, где вы хотите разместить карту (конец) -->
 
 

 Нужно вместо координат подставлять адреса и названия

Например определение центра карты   center: [49.131414000000014, 55.77904802324896] нужно заменить на  center: Казань,  а добавления точек на карту например  add(new ymaps.Placemark([49.217787, 55.743791] заменить на  add(new ymaps.Placemark("Казань, ул. Зорге, 88") 

пробовал реализовать через geocode(), но ничего не получается - карта вообще не отображается. Помогите! Спасибо! 

21 комментарий

Определить координаты по адресам можно здесь

Затем подставить координаты в указанные вами методы

мне нужно все сделать через код и 99% наверное через функцию geocode()

пробовал ее использовать, но никак не выходит 

вот например пробую установить центр карты в "Казань"
[CODE=js]
ymaps.geocode('Казань', { results: 1 }).then(function (res) {
// Выбираем первый результат геокодирования
var firstGeoObject = res.geoObjects.get(0);


var map = new ymaps.Map("ymaps-map-id_134244682198520393870", {
center: firstGeoObject.geometry.getCoordinates(),
zoom: 16,
type: "yandex#map"
});
[/CODE]

и в итоге карта пустая
что не так ? не могу понять

дайте ссылку я посмотрю

  Вот полный код

Я в нет не выкладывал

Я локалхосте тестирую 



http://api.yandex.ru/maps/tools/constructor/?lang=ru-RU" target="_blank" style="color: #1A3DC1; font: 13px Arial,Helvetica,sans-serif;">Создано с помощью инструментов Яндекс.Карт




там где вы создаетет карту не может быть переменной firstGeoObject по 2-м причинам

1. Вы сделали ее локальной в обработчике then

2. Обработчик в then выполнится позднее (асинхронно) чем будет создана карта

а как правильно? черкните код

БОЛЬШОЕ СПАСИБО!

п/с я то не профи в этом 

самое простое - перенести код создания карты в then

 

function fid_134250506289918332175(ymaps) {


ymaps.geocode('Казань', { results: 1 }).then(function (res) {
// Выбираем первый результат геокодирования
var firstGeoObject = res.geoObjects.get(0);


var map = new ymaps.Map("ymaps-map-id_134250506289918332175", {
center: firstGeoObject.geometry.getCoordinates(),
zoom: 16,
type: "yandex#map"
});
map.controls
.add("zoomControl")
.add("mapTools")
.add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));
map.geoObjects
.add(new ymaps.Placemark([49.217787, 55.743791], {
balloonContent: "1"
}, {
preset: "twirl#lightblueDotIcon"
}));
});
};

так то работает

но как тогда быть если .add(new ymaps.Placemark([49.217787, 55.743791] тоже нужно заменить координаты на буквенный адрес ? 

как определение координат перенести в отдельную пользовательскую функцию, которая  по буквенному адресу возвращает координаты в формате [x,y] 

 

пробовал так

function get_coords(adress) 

{

ymaps.geocode(adress, { results: 1 }); 

 var firstGeoObject = then.geoObjects.get(0);

return  firstGeoObject.geometry.getCoordinates();

 

а дальше

var map = new ymaps.Map("ymaps-map-id_134250506289918332175", {
center: get_coords('Казань'),
zoom: 16, 

 

но что-то так не канает 

then.geoObjects.get(0);

где вы такое увидели?

собственное изобретение?

так конечно работать не будет - then это метод принимающий функцию, которая будет вызвана (спустя время) когда результаты геокодирования придут


а как правильно записать в этом случаи?

 полный код моего творения 



http://api.yandex.ru/maps/tools/constructor/?lang=ru-RU" target="_blank" style="color: #1A3DC1; font: 13px Arial,Helvetica,sans-serif;">Создано с помощью инструментов Яндекс.Карт


 

создайте второй вызов ymaps.geocode по аналогии с первым

и внутри обработчика then создавайте метку

map.geoObjects
.add(new ymaps.Placemark([49.217787, 55.743791], {
balloonContent: "1"
}, {
preset: "twirl#lightblueDotIcon"
}));

один и тот же код будет несколько раз

это же противоречит догмам программирования

оформить через функцию разве ни как не возможно? 

вот нашол то что нужно

но на первой версии

как переделать в вторую

YMaps.jQuery(function ()
{
var map;
var placemark;
var options = {draggable: 0,hasBalloon: false};
var map = new YMaps.Map(YMaps.jQuery('#YMapsID')[0]); map.addControl(new YMaps.TypeControl()); map.addControl(new YMaps.Zoom()); map.addControl(new YMaps.ScaleLine());
var geocoder = new YMaps.Geocoder('Казань, пер. Дорожный д.3', {results: 1, boundedBy: map.getBounds()}); YMaps.Events.observe(geocoder, geocoder.Events.Load, function () { map.setCenter( this.get(0).getGeoPoint(), 15, YMaps.MapType.MAP );
var placemark = new YMaps.Placemark(this.get(0).getGeoPoint(),{style: 'default#carIcon'}); map.addOverlay(placemark); placemark.setBalloonContent('Казань, пер. Дорожный д.3');
});
});

 

а вот так также не работает 



http://api.yandex.ru/maps/tools/constructor/?lang=ru-RU" target="_blank" style="color: #1A3DC1; font: 13px Arial,Helvetica,sans-serif;">Создано с помощью инструментов Яндекс.Карт







 

скорее всего скобок не хватает

посмотрите что говорит файербаг

так и есть 

поправил

но теперь во втором вызове геокодера не виден map 

УРА! нашел решение!



http://api.yandex.ru/maps/tools/constructor/?lang=ru-RU" target="_blank" style="color: #1A3DC1; font: 13px Arial,Helvetica,sans-serif;">Создано с помощью инструментов Яндекс.Карт






бабушка-бэтмен БОЛЬШОЕ спасибо за подсказки!
 

var map;

function fid_134250506289918332175(ymaps) {
ymaps.geocode('Казань', { results: 1 }).then(function (res) {
// Выбираем первый результат геокодирования
var firstGeoObject = res.geoObjects.get(0);


map = new ymaps.Map("ymaps-map-id_134250506289918332175", {

посмотри тут http://evr-okna37.ru/o-kompanii/kontakty/
у меня шаблонный движок яваскрипт генерирует. на каждую точку, если есть координаты в базе - выставляет по координатам, если нет - то по геокодеру. суть в том что на каждую точку сделан свой калбэк.