Ändern Sie die Ansichtsmitte von OpenLayers 3


14

Ich verwende OpenLayers 3, um mit einigen Karten zu interagieren. Ich erkläre zuerst meine Karte:

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

Ich habe ein Ereignis, das eine Aktion auslöst, um das Ansichtszentrum meiner Karte zu ändern. So (meine Koordinaten sind im EPSG:4326Format):

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

Wenn die Funktion ausgeführt wird, erhalte ich Folgendes an der Explorer-Konsole:

Lat: 9.0412851667 Long: -79.5658145000 

Aber die Karten gehen an [0,0], weiß jemand warum das passiert?

Antworten:


26

In ol.proj.transform müssen Sie fromProjection vor toProjection angeben, dann sollte es funktionieren.

Wie Michael Gentry in seiner Antwort erklärt, besteht ein weiteres Problem darin, dass Sie zuerst den Längengrad (West-Ost, also x) und dann den Breitengrad (Süd-Nord, also y) angeben müssen.

Eine bessere Möglichkeit, den Mittelpunkt festzulegen, besteht darin, die aktuelle Ansicht abzurufen und dort den Mittelpunkt festzulegen, anstatt immer einen neuen zu erstellen.

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

Ok, ich habe es verstanden, danke. Eine weitere Sache, wenn ich es so ändere, bekomme ich einen neuen Fehler Uncaught TypeError: Failed to execute 'putImageData' on 'CanvasRenderingContext2D': float parameter 3 is non-finite. ol.js:457 2Uncaught RangeError: Invalid array length. Und ich denke, weil meine Koordinaten zu lang sind. Wenn ich es ändere [131.044922, -25.363882], funktioniert es in Ordnung. Also sind meine Koordinaten zu lang?
— Guillelon

das sollte nicht das problem sein. Mit welchen Koordinaten ist der Fehler aufgetreten? die, die du oben erwähnt hast?
— Simon Zyx

ja der da
— Guillelon

Ich habe diese Koordinaten mit einer MapQuest-Karte ausprobiert und es hat funktioniert. Ein Längengrad von -79 liegt immer noch innerhalb der Grenzen von EPSG: 4326 (innerhalb von +/- 90 Grad) und EPSG: 3857 (innerhalb von +/- 85 Grad).
— Simon Zyx

Es ist ein Tippfehler innerhalb des Renderers und ein Rangfehler
— Simon Zyx

9

Ich habe ein neues Stapelaustauschkonto und habe keinen Ruf, der hoch genug ist, um zu "Uncaught TypeError: Ausführen von 'putImageData' für 'CanvasRenderingContext2D' fehlgeschlagen: Float-Parameter 3 ist nicht endlich" Stellung zu nehmen. Error. Dies liegt daran, dass Sie die lat- und die long-Eingaben rückwärts haben.

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

sollte sein:

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

falls jemand anderes dieses Problem hat.


ja du hast recht - ich werde meine antwort entsprechend aktualisieren.
— Simon Zyx

0

Nur für Browser:

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

Für die Verwendung mit der 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
    })
  });
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.