OpenLayers 3ビューセンターの変更


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]、これがなぜ起こるのか誰にもわかりませんか?

回答:


26

ol.proj.transformでは、toProjectionの前にfromProjectionを指定する必要があります。これを実行する必要があります。

Michael Gentryが彼の答えで説明しているように、もう1つの問題は、まず経度(西東、したがってx)を指定し、次に緯度(南北、したがってy)を指定する必要があることです。

中心を設定するより良い方法は、常に新しいビューを作成するのではなく、現在のビューを取得してそこに中心を設定することです。

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

了解しました。もう1つ、そのように変更すると、新しいエラーが発生します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]それは大丈夫です。座標が長すぎますか??
ギヨン14

それは問題ではないはずです。エラーはどの座標で発生しましたか?あなたが上で言及したものは?
サイモンザイクス14

はい、そこにあります
ギヨン14

これらの座標をMapQuestマップで試したところ、うまくいきました。-79の経度は、EPSG:4326(+/- 90度以内)およびEPSG:3857(+/- 85度以内)の範囲内にあります。
サイモンザイクス14

レンダラー内部で発生するタイプエラーとrangerror
サイモン

9

新しいスタック交換アカウントを持っていますが、「Uncaught TypeError: 'CanvasRenderingContext2D'で 'putImageData'の実行に失敗しました:floatパラメーター3は非有限です」についてコメントするほどの評判はありません。エラー。これは、latとlongの入力が後方にあるために発生します。

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
    })
  });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.