按多边形和 Return 县 ID/Name 中的点过滤
Filter by Point in Polygon and Return County ID/Name
我重做了这个方法,但还是没用。这次我有一个非常简短的工作示例,完美地说明了问题:
https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/
在上面的块中,您将看到一张县地图。另外,我有用户输入的纬度和经度,如下所示:
var lat = d3.select('#lat_input').node();
var long = d3.select('#long_input').node();
这些坐标可以在美国境内的任何地方。我想要做的是创建一个查询用户输入坐标和 returns 县的 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]);
});
我检查了你链接的数据。
objects.counties.geometries 的元素 0 不是 'Polygon' 类型,而是 'MultiPolygon'.
d3.polygonContains 的第一个参数需要多边形,不能处理多边形。也许你应该在不同的几何体上使用不同的方法。
我重做了这个方法,但还是没用。这次我有一个非常简短的工作示例,完美地说明了问题:
https://bl.ocks.org/diggetybo/raw/6d35e5ecd17992650d0a23896e649b25/
在上面的块中,您将看到一张县地图。另外,我有用户输入的纬度和经度,如下所示:
var lat = d3.select('#lat_input').node();
var long = d3.select('#long_input').node();
这些坐标可以在美国境内的任何地方。我想要做的是创建一个查询用户输入坐标和 returns 县的 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]);
});
我检查了你链接的数据。
objects.counties.geometries 的元素 0 不是 'Polygon' 类型,而是 'MultiPolygon'.
d3.polygonContains 的第一个参数需要多边形,不能处理多边形。也许你应该在不同的几何体上使用不同的方法。