Картинная карта 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
    })
  });