web-dev-qa-db-ja.com

OpenLayers 3でBoundsはどのように機能しますか?

OpenLayers 2.xの OpenLayers.Bounds の概念は、OpenLayers 3にまだ存在しますか?それはどのように変更されましたか、その新しい名前は何ですか?

14
colllin

更新:OL4: https://openlayers.org/en/latest/apidoc/ol.html#.Extent

「境界」または「境界ボックス」(BBOX)の新しい単語は「範囲」のようです。見る:

現時点で物事を見つける1つの方法は、OL3リポジトリで検索を実行することです。例: https://github.com/openlayers/ol3/search?p=3&q=BBOX&type=Code

8

この機能に関するドキュメントは見つかりませんでしたが、Extentは機能しているようです:

_var vectorSources = new ol.source.Vector();
var map = new ol.Map({
  target: map_id,
  layers: [
    new ol.layer.Tile({
      source: ol.source.OSM()
    }),
    new ol.layer.Vector({
      source: vectorSources
    })
  ],
  view: new ol.View({
    center: [0, 0],
    zoom: 12
  })
});

var feature1 = new ol.Feature({
  geometry: new ol.geom.Point(coords)
});
vectorSources.addFeature(feature1);
var feature2 = new ol.Feature({
  geometry: new ol.geom.Point(coords)
});
vectorSources.addFeature(feature2);
map.getView().fitExtent(vectorSources.getExtent(), map.getSize());
_

メソッドvectorSources.getExtent()は、次のような任意のExtentオブジェクトで置き換えることもできます。

map.getView()。fitExtent([1,43,8,45]、map.getSize());

OpenLayer 3.9以降、メソッドが変更されました。

map.getView().fit(vectorSources.getExtent(), map.getSize());

6
Bastien Ho

答えに少し例を追加すると、Boundsは「extent」と呼ばれるようになり、洗練されたオブジェクト/クラスではなく、単に4つの数値の配列になります。 「ol.extent」には、変換などのヘルパー関数がたくさんあります。変身する方法のほんの少し例:

var tfn = ol.proj.getTransform('EPSG:4326', 'EPSG:3857');
var textent = ol.extent.applyTransform([6, 43, 16, 50], tfn);
var textent = ol.proj.transformExtent([6, 43, 16, 50], 'EPSG:4326', 'EPSG:3857');

http://ol3js.org/en/master/apidoc でこれまでにAPI-Docを見つけることができなかったため、情報を取得するには source を読む必要があります。

API-Docsはベータ版から完成しています。だからあなたは今それを見つけるでしょう。

コメントで述べたように、正しいAPI関数は ol.proj.transformExtent() です。

5
Grmpfhmbl

OpenLayers 3.17.1で、さまざまなことを試した後、2つの異なる方法で境界を設定できました。

A) @ Grmpfhmbl言及 のように、以下のようなol.proj.transformExtent関数を使用します。

var extent = ol.proj.transformExtent(
    [-0.6860987, 50.9395474, -0.2833177, 50.7948214],
    "EPSG:4326", "EPSG:3857"
);

map.getView().fit( extent, map.getSize() );

B)少し変わった、次のようにol.geom.Polygonを使用:

// EPSG:3857 is optional as it is the default value
var a = ol.proj.fromLonLat( [-0.6860987, 50.9395474], "EPSG:3857" ),
    b = ol.proj.fromLonLat( [-0.2833177, 50.7948214], "EPSG:3857" ),
    extent = new ol.geom.Polygon([[a, b]]);

map.getView().fit( extent, map.getSize() );
2
Mahdi