Изменить OpenLayers 3 view center

14

Я использую OpenLayers 3 для взаимодействия с некоторыми картами. Сначала я объявляю свою карту:

map = new ol.Map({
            target: 'map',
            layers: [
              new ol.layer.Tile({
                  source: new ol.source.OSM()
              })
                ],
            view: new ol.View({
                center: [0, 0],
                zoom: 2
            })
        });

У меня есть событие, которое запускает действие, чтобы изменить центр просмотра моей карты. Таким образом, (мои координаты в EPSG:4326формате):

function CenterMap(lat, long) {
     console.log("Lat: " + lat + " Long: " + long);
     map.setView(new ol.View({
            center: ol.proj.transform([lat, long], 'EPSG:3857', 'EPSG:4326'),
            zoom: 5
     }));
}

Когда функция запускается, я получаю это в консоли проводника:

Lat: 9.0412851667 Long: -79.5658145000 

Но карты идут [0,0], кто-нибудь знает, почему это происходит?

Guillelon
источник

Ответы:

26

В ol.proj.transform вам нужно указать fromProjection перед toProjection, тогда оно должно работать.

Как объясняет Майкл Джентри в своем ответе, другая проблема заключается в том, что вы должны сначала указать долготу (запад-восток, таким образом, х), а затем широту (юг-север, таким образом, у).

И лучший способ установить центр - это получить текущий вид и установить центр вместо того, чтобы всегда создавать новый.

function CenterMap(long, lat) {
    console.log("Long: " + long + " Lat: " + lat);
    map.getView().setCenter(ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857'));
    map.getView().setZoom(5);
}
Саймон Зикс
источник
Хорошо, я понял, спасибо. Еще одна вещь, если я изменю это таким образом, я получаю новую ошибку Uncaught TypeError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': float parameter 3 is non-finite. ol.js:457 2Uncaught RangeError: Invalid array length. И я думаю, потому что мои координаты слишком длинные. Если я изменю это для [131.044922, -25.363882]работы, хорошо. Так мои координаты слишком длинные ??
Guillelon
это не должно быть проблемой. с какими координатами произошла ошибка? те, которые вы упомянули выше?
Саймон Зикс
да, тот, что есть
Guillelon
Я попробовал эти координаты с картой MapQuest, и это сработало. Долгота -79 все еще находится в пределах EPSG: 4326 (в пределах +/- 90 градусов) и EPSG: 3857 (в пределах +/- 85 градусов).
Саймон Зикс
это ошибка, возникающая внутри рендерера, и ошибка рейнджера
Simon Zyx
9

У меня есть новая учетная запись обмена стека, и у меня нет достаточно высокой репутации, чтобы комментировать «Uncaught TypeError: Не удалось выполнить 'putImageData' для 'CanvasRenderingContext2D': параметр float 3 не является конечным." ошибка. Это происходит потому, что у вас есть лат и длинный вход назад.

map.getView().setCenter(ol.proj.transform([lat, long], 'EPSG:4326', 'EPSG:3857'));

должно быть:

map.getView().setCenter(ol.proj.transform([long, lat], 'EPSG:4326', 'EPSG:3857'));

в случае, если кто-то еще имеет эту проблему.

Майкл Джентри
источник
да, вы правы - я обновлю свой ответ соответственно.
Саймон Зикс
0

Только для браузера:

<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
    })
  });
hoogw
источник