2015-01-07 4 views
13

Я пою OpenLayers 3, чтобы отобразить карту. Я хочу сосредоточить карту, используя координаты latLon. Для начала я использую quickstart code. Используя этот код, я не могу изменить центр карты. Я думаю, что это как-то связано с Spherical Mercator projection. Единственное, у меня есть только полные координаты.Openlayers 3 center map

Кто-нибудь знает, как центрировать карту из openlayers v3?

ответ

22

Вы должны преобразовать Lon/лат координаты в правильной проекции (или систему координат) с помощью

var olCoordinates = ol.proj.transform([lon, lat],"WGS84", "EPSG:900913") 

Теперь вы можете установить центр с olCorrdinates.

Различные проекции имеют разные кодовые обозначения. WGS84 - это «нормальный» lon/lat и EPSG: 900913 - это проекция, часто используемая в веб-картах, таких как карты google, openstreetmap и bing.

Я думаю, что OpenLayers 3 имеет встроенную поддержку для преобразования из WGS84/EPSG: 4326 (lon/lat), но если вам нужно преобразовать в или из других систем координат, вы можете включить библиотеку proj4js. Openlayers будет интегрироваться с этой библиотекой и иметь возможность делать преобразования таким же образом.

Transform ДОКУМЕНТАЦИЯ http://openlayers.org/en/v3.1.1/apidoc/ol.proj.html

Proj4 Lib https://github.com/proj4js/proj4js

Edit: В примере вы имеете в виду, в центре место фактически установлен с долготу/лат.

view: new ol.View({ 
    center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), 
    zoom: 4 
}) 

EPSG: 4326 на самом деле так же, как WGS84 и EPSG: 3857 такая же, как EPSG: 900913. Это очень запутанно. Я был там сам.

Вам просто нужно изменить числа 37.41 и 8.82 на ваши координаты lon/lat. Если вы хотите изменить местоположение центра после инициализации, вам нужно будет использовать setCenter();

map.getView().setCenter(ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857')) 
+1

Что это: «WGS84», «EPSG: 900913»? Я вижу эти вещи на многих сайтах, но я не совсем понимаю, что это такое. – SheperdOfFire

+3

Это проекция карты или система координат. Есть много способов измерить мир, и это всего лишь кодовые имена по разным способам его выполнения. WGS84 являются lon/lat и EPSG: 900913 - это тот, который используется openstreetmap, google, bing и т. Д. Есть и другие, такие как UTM-проекции, которые выплевывают мир на маленькие прямоугольники и используют метрическую систему в качестве координат. –

+2

Также позаботьтесь о порядке аргументов. Метод ol.proj.transform ожидает [долгота, широта], тогда как в некоторой программе используется порядок аргументов широты/долготы. Например, при выборе «что здесь» из контекстного меню карты Google местоположение отображается как широта/долгота. –

7

OpenLayers представил ol.proj.fromLonLat и ol.proj.toLonLat функции on Mar. 2015.

Чтобы центрировать карту, вы можете использовать его во время инициализации

view: new ol.View({ 
     center: ol.proj.fromLonLat([lon, lat]) 
     }) 

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

map.getView().setCenter(ol.proj.fromLonLat([lon, lat])) 

Хотя они just wrappers из ol.proj.transform, я нахожу их более простой в использовании.

Веб-меркаторы по умолчанию: EPSG:4326 и EPSG:3857.

Ole Borgersen states, WGS84 такое же, как EPSG:4326, что является типом длинноволновых координат, с которыми мы привыкли работать.

ol.proj.fromLonLat([lon, lat]); 
// is equivalent of 
ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857') 

ol.proj.toLonLat([lon, lat]); 
// is equivalent of 
ol.proj.transform([lon, lat], 'EPSG:3857', 'EPSG:4326')