2

関数の予期しない動作にたどり着いたという問題がありd3.geo.boundsます。

var bounds = d3.geo.bounds(data);

ポイント フィーチャのみを含む geoJSON FeatureCollection の場合、適切な境界ボックスが返されません。具体的には、コレクション内の最初と最後のポイントの x 値が、ポイント グループの最小および最大 x 値の代わりに使用されているように見えます。 . これはhttp://jsbin.com/icosof/4/editで実際に見ることができます。

したがって、返される境界ボックスの座標には、最小および最大の y 値が含まれますが、最大および最小の x 値は含まれません。代わりに、これらはセットの最初と最後の機能から取得されたようです。

[[6113.30166221, -6663.98951731], [5153.32052977, -77.3529517971]]

座標を直接操作して境界オブジェクトを生成する

xvalues = [];
$.each(data.features, function(i,el){
  xvalues.push(el.geometry.coordinates[0]);
});

yvalues = [];
$.each(data.features, function(i,el){
  yvalues.push(el.geometry.coordinates[1]);
});
console.log([[Math.min.apply(null,xvalues),Math.min.apply(null,yvalues)],
[Math.max.apply(null,xvalues),Math.max.apply(null,yvalues)]]);

望ましい結果が得られます。

 [[3397.33954824, -6663.98951731], [6504.18296202, -77.3529517971]]

X座標でソートされたFeatureCollectionを期待していますかd3.geo.bounds(もしそうなら、どうすればこれを回避できますか)、それともバグですか?

4

1 に答える 1

0

d3.geo.boundsここでの混乱は、フィーチャが x/y 値ではなく、緯度/経度の値を持つことを期待していることだと思います。したがって、入力は% 360と見なされ、期待する最大/最小は得られません。

これを機能させるには、座標を緯度/経度の値に変換する必要がある場合があります-座標系が何であるかがわからないため、読者の演習として残します。

于 2013-07-18T22:36:32.637 に答える