Клуб API Карт

Добавление меток и определение локации

ratedapa
4 августа 2016, 22:32

Как одновременно сделать добалвение меток чз xml и определение местонахождения пользователя?

Получилось сделать таким образом:
 

ymaps.ready(init);

function init () {
    // Создание экземпляра карты
    var geolocation = ymaps.geolocation,
     myMap = new ymaps.Map('map', {
            center: [55.76, 37.64],
            zoom: 14
        }, {
            searchControlProvider: 'yandex#search'
        });
        
        geolocation.get({
        provider: 'yandex',
        mapStateAutoApply: true
    }).then(function (result) {
        // Красным цветом пометим положение, вычисленное через ip.
        result.geoObjects.options.set('preset', 'islands#redCircleIcon');
        result.geoObjects.get(0).properties.set({
            balloonContentBody: 'Мое местоположение'
        });
        myMap.geoObjects.add(result.geoObjects);
    });
    // Загрузка YMapsML-файла
    ymaps.geoXml.load('/map1.xml?time="7"')
        .then(function (res) {
            // Добавление геообъектов на карту.
            myMap.geoObjects.add(res.geoObjects);
            // Вызывается в случае неудачной загрузки YMapsML-файла.
        }, function (error){
            alert('Ошибка: ' + error);
        });
        
        myMap.geoObjects.add(
    new ymaps.Placemark(
        [ymaps.geolocation.latitude, ymaps.geolocation.longitude],
        {
            balloonContentHeader: ymaps.geolocation.country,
            balloonContent: ymaps.geolocation.city,
            balloonContentFooter: ymaps.geolocation.region
        }
    )
);

}

но это определение чз IP, а хотелось бы через  Geolocation API 

И второй вопрос: что такое ?time="7" в строке загрузки ymaps.geoXml.load ? без этого значения почему то новые объекты, доабленные в xml файл, не отображаются! отображаются только если менять это вручную, на любую произвольную цифру! 

12 комментариев
> но это определение чз IP, а хотелось бы через Geolocation API 


Да, вы сами указали определелять по IP
geolocation.get({
  provider: 'yandex',
  mapStateAutoApply: true
})


> И второй вопрос: что такое ?time="7" в строке загрузки ymaps.geoXml.load
Это сброс кеша.


ymaps.geoXml.load('/map1.xml?v=' + (+new Date()))
Хорошо, вытекающие вопросы: как поставить определять через Geolocation API , можете пример дать? у меня никак не получается вписать туда этот вариант. не работает.


За пример с КЭШем низчайший поклон, а то уже запарился с ним, никак автоматом не обновлял данные нормально.
apaboss,
Опции вроде все описаны


geolocation.get({
provider: 'browser',
autoReverseGeocode: false,

mapStateAutoApply: true

})
dimik,
но вот не срабатывает. полный код такой. не определяет место


function init () {
// Создание экземпляра карты
var geolocation = ymaps.geolocation,
myMap = new ymaps.Map('map', {
center: [55.76, 37.64],
zoom: 14
}, {
searchControlProvider: 'yandex#search'
});

geolocation.get({
provider: 'browser',
autoReverseGeocode: false,
mapStateAutoApply: true
}).then(function (result) {
result.geoObjects.options.set('preset', 'islands#blueCircleIcon');
myMap.geoObjects.add(result.geoObjects);
});
ratedapa,
У меня этот код отрабатывает.
Чтобы работала геолокация в последних версиях Chrome сайт должен использовать https
Во-вторых там браузер диалог предупреждения показывает, надо разрешить
dimik,
хм, ну да, действительно. попробовал в мозилле, сработало, сделав запрос. Плохо что запрос выскакивает, может отпугнуть пользователя.


С https ясно, спасибо. 
apaboss,


> Плохо что запрос выскакивает, может отпугнуть пользователя.
Это к сожалению нельзя никак убрать.
Лучше всегда использовать с ключом provider: 'auto', 
если пользователь нажмет "No", то хотя бы по  IP определится
dimik,
спасибо, учел эти моменты. и еще заметил - после определения локации, зум становится на середину, а не тот что указан в коде. нужно где то в функции геолокации прописать?
apaboss,
наверное надо убрать mapStateAutoApply: true
dimik,
нет, тогда автоопределение не срабатывает
apaboss,
Да срабатывает оно, просто масштаб и центр карты надо выставлять самому


geolocation.get({
autoReverseGeocode: false,
}).then(function (result) {
result.geoObjects.options.set('preset', 'islands#blueCircleIcon');
myMap.geoObjects.add(result.geoObjects);
myMap.setCenter(
  // координаты геолоцированной точки
  result.geoObjects.get(0).geometry.getCoordinates(),
  // нужный масштаб
  16
);
dimik,
спасибо. появился еще смежный вопрос, может быть подскажите. как в балун вставить изображение? шаблон задаю чз xml


никак не могу понять, как обработать img и вывести