2017-05-30 12 views
0

緯度/経度での入力ポイントのセットに対してボロノイポリゴンを作成しようとしています。問題は、私の入力データセットが同じ場所に複数の点を含むことができるため、その点に対して同じボロノイポリゴンが返されることです。D3.js geomを使用してボロノイポリゴンをスケーリングして、結果が緯度経度で、px座標ではない

以下のスクリーンショットと同じポイントに複数のポリゴンがあることを示すために、重なり合うポリゴン(以前のポリゴンよりもわずかに小さいポリゴン)を視覚的に表示したいとします。

ドキュメントを読んだことで、投影を拡大することはできますが、これらの投影は現実の緯度/経度の値ではなく、すでにpxで表示されているようです。

したがって、入力ポリゴンを緯度/経度で取り、X%で縮小したポリゴンを、緯度/経度で出力ポリゴンをd3.js-v3で返すにはどうすればよいですか?

例ポリゴン入力:[long1、LAT1、long2、LAT2、long3、LAT3、long4、LAT4]

concentric polygons

編集:上記画像はポリゴンをクリップする "クリップ" 機能を使用していますクリップの半径が短くなり、エッジポリゴンに望ましい効果が得られますが、内部にバインドされたポリゴンには効果がありません。

答えて

0

したがって、解決策は最後に非常に簡単でした。

var p1 = d3.geom.polygon(polygonArray); 
var centroid = p1.centroid(); 
var newPolygonArray = []; 
p1.forEach(function(v, i) { 
    var newLong = centroid[0] + (v[0] - centroid[0])*(0.9); 
    var newLat = centroid[1] + (v[1] - centroid[1])*(0.9); 
    newPolygonArray.push(newLong, newLat); 
}.bind(this)); 

私は、変換翻訳し、ポリゴンをスケーリングするD3機能と投影を使用しようとあまりにも長い間過ごしたが、私はその日の仕事左とすぐに、それは私が行うために必要なすべては、単純な数学だったことを私にヒット上記の手順。

あなたが立ち往生したときに休憩を取ることは、新鮮な空気があなたの目を開くことができます。

concentric voronoi polygons