OpenLayers 3 görüntüleme merkezini değiştir


14

Bazı haritalarla etkileşim için OpenLayers 3 kullanıyorum. İlk olarak haritamı beyan ederim:

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
            })
        });

Haritamın görüntüleme merkezini değiştirmek için bir işlemi tetikleyen bir etkinliğim var. Bu şekilde, (koordinatlarım EPSG:4326biçimdedir):

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
     }));
}

İşlev çalıştığında bunu explorer konsolundan alıyorum:

Lat: 9.0412851667 Long: -79.5658145000 

Ama haritalar gidiyor [0,0], bunun neden olduğunu bilen var mı?

Yanıtlar:


26

Ol.proj.transform dosyasında toProjection öğesinden önce fromProjection öğesini belirtmeniz gerekir, o zaman çalışmalıdır.

Michael Gentry'nin cevabında açıkladığı gibi, bir başka Sorun, önce boylamı (böylece batı-doğu x) ve sonra enlemi (güney-kuzey böylece y) belirtmeniz gerektiğidir.

Ve merkezi ayarlamanın daha iyi bir yolu, her zaman yeni bir görünüm oluşturmak yerine geçerli görünümü elde etmek ve merkezi orada ayarlamaktır.

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);
}

Tamam, teşekkürler. Bir şey daha, bu şekilde değiştirirsem yeni bir hata alıyorum Uncaught TypeError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': float parameter 3 is non-finite. ol.js:457 2Uncaught RangeError: Invalid array length. Bence koordinatlarım çok uzun. Eğer değiştirirsem [131.044922, -25.363882]çalışır. Yani koordinatlarım çok mu uzun?
— Guillelon

sorun olmamalı. hata hangi koordinatlarla ortaya çıktı? yukarıda bahsettikleriniz?
— Simon Zyx

evet orada bir
— Guillelon

Bu koordinatları bir MapQuest haritası ile denedim ve işe yaradı. -79 boylamı hala EPSG: 4326 (+/- 90 derece içinde) ve EPSG: 3857 (+/- 85 derece içinde) sınırları dahilindedir.
— Simon Zyx

renderer ve bir rangerror içinde ortaya çıkan bir daktilo
— Simon Zyx

9

Yeni bir yığın exchange hesabım var ve "Uncaught TypeError: 'CanvasRenderingContext2D' 'putImageData' yürütülemedi: float parametresi 3 sonlu değildir." hata. Bunun nedeni lat ve uzun girişlerin geriye doğru olmasıdır.

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

olmalı:

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

başka kimsenin bu sorunu olması durumunda.


evet haklısın - cevabımı buna göre güncelleyeceğim.
— Simon Zyx

0

Yalnızca tarayıcı kullanımı için:

<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 kullanımı için

   // 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
    })
  });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.