2014-11-05 6 views
1

Когда приложение запускается, я хочу, чтобы центр просмотра карты находился в текущей позиции пользователей. Я пробовал два разных подхода и не могу заставить их работать. Первый работал правильно в листовке, но в процессе разработки я решил использовать OL3 вместо этого.OL3: настройка центра отображения карты на geolocation.getCurrentPosition не работает

Первый подход (работал в талоне):

var myProjectionName = "EPSG:25832"; 
    proj4.defs(myProjectionName, 
      "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"); 

var centerPosition; 

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(
     function (pos) { 
       centerPosition =    
          ol.proj.transform(
            [position.coords.longitude, 
             position.coords.latitude], 
            'EPSG:4326', 
             myProjectionName); 
     }, 
     function (err) {centerPosition = [724844,6178000];}, 
     { 
      enableHighAccuracy: false, 
      timeout: 5000, 
      maximumAge: 1000 
     }); 
} 

Мой второй подход с использованием класса ol.Geolocation:

var proj1 = ol.proj.get(myProjectionName); 
var geolocation = new ol.Geolocation({ 
          projection: proj1 
         }); 
var centerPosition= geolocation.getPosition(); 

Центральное положение используется при создании объекта Вид/карты:

var map = new ol.Map({ 
    target: 'map', 
    logo : false, 
    layers: [ GSTGroup, OVLGroup, SheatLayer], 
    view: new ol.View({ 
     projection: myProjectionName, 
     center: centerPosition, 
     resolutions : AVLresolutions, 
     resolution : 2 
    }) 
}); 

У меня есть некоторые подозрения, что причиной проблемы является проекция, но на другую r hand проекция работает правильно в трансформирующих слоях (WMTS, Vector), источник от Geojson в разных координатах и ​​в ol.control.MousePosition.

Я использую Firefox 32.0.3 и Geolocator плагин для разработки/тестирования

Рабочий пример в http://jsfiddle.net/AndersFinn/ak4zotn8/

+0

Это, скорее всего, быть проекцией. Вы используете UTM 32 для Южной Швеции/Норвегии, в метрах, а затем загружаете векторные данные в 4326, предположительно, и хотите использовать первый, чтобы установить центр, правильно? Если бы вы могли предоставить минимальный рабочий пример в jsfiddle, включая wms, это помогло бы. –

+0

Привет, Джон. к сообщению добавляется рабочий пример. Спасибо за Ваш интерес. –

ответ

5

Добавить после map декларации следующее (проверено):

var proj1 = ol.proj.get(myProjectionName); 
var geolocation = new ol.Geolocation({ 
    projection: myProjectionName, 
    tracking: true 
}); 

geolocation.on('change', function(evt) { 
    console.log(geolocation.getPosition()); 
    map.getView().setCenter(geolocation.getPosition()); 
}); 

Самая важная часть - tracking: true в коде: это означает, что вы регулярно проверяете положение в центре.

Вторая важная часть, чтобы связать события на geolocation объект (экземпляр ol.Geolocation)

См в official examples образцах геолокации и API docs внести некоторые изменения в зависимости от ваших требований

 Смежные вопросы

  • Нет связанных вопросов^_^