2017-02-22 6 views
0

私はこのアプローチをやり直しましたが、まだそれは機能していません。非常に短く、完全に問題を示して、私は作業例を持っているこの時間:ポリゴンのポイントによるフィルタリングと返信国のID /名前

https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/

は、上記のブロックでは、郡のマップが表示されます。また、緯度と経度のユーザー入力は次のようになります。

var lat = d3.select('#lat_input').node(); 

var long = d3.select('#long_input').node(); 

これらの座標は、米国内のどこにでも設定できます。私がしたいのは、ユーザーの入力座標を照会し、郡のFIPS IDを返す関数を作成することです。

var containing_county = us.objects.counties.geometries.filter(function(polygon) { 
     return d3.polygonContains(polygon, [long.value, lat.value]); 
    }); 
    console.log(containing_county) 
}); 

しかし、私はそれが期待していた方法をフィルタリングしていない、それは不定のプロパティ0を読み取ることができないと言っている。

ここでは何が違うのですか?

も試み:

var containing_county = topojson.feature(us, us.objects.counties).features.filter(function(d) { 
return d3.polygonContains(d.geometry, [long.value, lat.value]); 
    }); 
+0

実例をご提供できますか? – elias

+0

は、まもなく実際のサンプルを提供することになりました。 –

+0

あなたはまだ多角形のパラメータではなく、多角形の代わりに – elias

答えて

1

は、私はあなたがリンクされたデータをチェックしました。
objects.counties.geometriesの要素0は 'Polygon'型ではなく、 'MultiPolygon'です。
d3.polygonContainsの最初のパラメーターはポリゴンを必要とし、マルチポリゴンを処理できません。おそらく、異なるジオメトリに対して異なるメソッドを使用する必要があります。

+0

を渡しています。だから私はあなたがそれを獲得したと思います。あなたの答えは今では意味がありますが、FIPS IDを含むオブジェクトを返すためには、次のようにしています: 'var containing_county = mapData.filter(function(polygon){ if(polygon.geometry!== null){ return d3 .polygonContains(polygon.geometry.coordinates [0]、[long.value、lat.value]) '座標フィーチャを追加してゼロでスライスしなければならなかった。 –

+0

@ArashHowaida、あなたの問題を解決しましたか?それは今働いていますか? – elias

+0

うん、上のコメントのコード行が私のためにしてくれました。キーは0でスライスし、 '.coordinates'を追加しました。 –

関連する問題