1

誰かが次のシナリオを説明してくれませんか?

4 つの座標のみを含む 1 つのポリゴン フィーチャを含む GeoJSON ファイルがあるとします。

var json = {
  "type": "FeatureCollection", 
  "features": [
    {
      "geometry": {
        "type": "Polygon", 
        "coordinates": [
          [
            [
              6.55757, 
              45.4283625
            ], 
            [
              6.50925565, 
              45.3728949
            ], 
            [
              6.5249137, 
              45.3728329
            ], 
            [
              6.52511385, 
              45.37276325
            ]
          ]
        ]
      }, 
      "type": "Feature", 
      "properties": {
        "uid": "fb3f3081-c6cf-4f64-8ccb-67918a3dbe84"
      }
    }
  ]
}

これをメルカトルに投影し、バウンディング ボックスを取得します。

var projection = d3.geo.mercator()
.scale(1)
.precision(0);

var path = d3.geo.path()
.projection(projection);

var pathBounds = path.bounds(json.features[0]);
var geoBounds = d3.geo.bounds(json.features[0]);

json.features[0].geometry.coordinates[0].map(function(d) {
    console.log("projection:", projection(d)[0], projection(d)[1]);
});

console.log('path.bounds:', pathBounds[0][0], pathBounds[0][1])
console.log('path.bounds:', pathBounds[1][0], pathBounds[1][1])

console.log('d3.geo.bounds:', geoBounds[0][0], geoBounds[0][1])
console.log('d3.geo.bounds:', geoBounds[1][0], geoBounds[1][1])

結果は直感的ではありません。パスの境界ボックスは、投影されたどのポイントよりも大きく、地理境界ボックスは[[-180,-90],[180,90]].

ポリゴンは、ポリゴンの外側の世界全体であると解釈されているようです。これは期待されていますか?ポリゴンをリストされたポイント内の領域として扱うのではなく、なぜそうしているのでしょうか?

Fiddle (デバッガーをオンにしてコンソール ログを表示):

https://jsfiddle.net/pkerpedjiev/emr2g4f8/

4

1 に答える 1

3

ドキュメントには次のように記載されています。

重要: ポリゴンの内側は、ポリゴンが時計回りに巻き付いているすべてのポイントです。

ポイントの順序を逆にすると、正しく機能するはずです。

于 2015-11-08T21:20:55.607 に答える