Картинная карта Openlayers 3
Я пою OpenLayers 3, чтобы отобразить карту. Я хочу сосредоточить карту, используя координаты latLon.
Я использую код быстрого запуска.
Используя этот код, я не могу изменить центр карты. Я думаю, что это имеет отношение к Spherical Mercator projection
. Единственное, у меня есть только полные координаты.
Кто-нибудь знает, как сосредоточить карту от openlayers v3?
Ответы
Ответ 1
Вам необходимо преобразовать координаты lon/lat в правильную проекцию (или систему координат), используя
var olCoordinates = ol.proj.transform([lon, lat],"WGS84", "EPSG:900913")
Теперь вы можете установить центр с olCorrdinates.
Разные проекции имеют разные кодовые имена. WGS84 - это "обычный" лонг/лат, а EPSG: 900913 - это проекция, часто используемая в веб-картах, таких как карты Google, openstreetmap и bing.
Я думаю, что OpenLayers 3 имеет встроенную поддержку для преобразования из WGS84/EPSG: 4326 (lon/lat), но если вам нужно преобразовать в или из других систем координат, вы можете включить библиотеку proj4js. Openlayers будут интегрироваться с этой библиотекой и смогут выполнять преобразования таким же образом.
Преобразование документации http://openlayers.org/en/v3.1.1/apidoc/ol.proj.html
Proj4 lib https://github.com/proj4js/proj4js
Редактировать: в примере, к которому вы обращаетесь, расположение центра фактически задается с помощью lon/lat.
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'))
Ответ 2
OpenLayers представила ol.proj.fromLonLat
и ol.proj.toLonLat
функции в марте 2015 г..
Чтобы центрировать карту, вы можете использовать ее во время инициализации
view: new ol.View({
center: ol.proj.fromLonLat([lon, lat])
})
или после создания карты
map.getView().setCenter(ol.proj.fromLonLat([lon, lat]))
Хотя они просто обертки ol.proj.transform
, я считаю их более простыми в использовании.
По умолчанию веб-меркаторы EPSG:4326
и EPSG:3857
.
Как Ole Borgersen states, WGS84
совпадает с EPSG:4326
, который является типом Long-Lat координат, с которыми мы привыкли работать.
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')
Ответ 3
зависит от того, как вы используете?
Только для браузера:
<script src='https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js'></script>
ol.proj.transform()
ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857');
Для использования js-app
// for projection
import {transform} from 'ol/proj.js';
// use this one : transform([-118.246521, 34.049039], 'EPSG:4326', 'EPSG:3857')
var map = new Map({
layers: layers,
target: 'map',
view: new View({
//center: [-118.246521, 34.049039],
center: transform([-118.246521, 34.049039], 'EPSG:4326', 'EPSG:3857'),
zoom: 16
})
});