是否可以使用JavasScript确定GeoJSON点是否在GeoJSON多边形内

Is it possible to determine if a GeoJSON point is inside a GeoJSON polygon using JavasScript?

本文关键字:是否 GeoJSON 多边形 确定 可以使 JavasScript      更新时间:2023-09-26

是否可以仅使用JavaScript(通过d3、topojson或任何其他方式)确定给定lat、lon处的GeoJSON点是否位于给定GeoJSON多边形内?

例如,我可以根据这里的教程绘制一张显示英国国家的地图。

然后我有一些点,它们有坐标,但没有指示它们位于哪个国家。

我想显示每个国家的总点数。

我可以在浏览器中计算出哪个国家包含每个点吗?或者我需要使用PostGIS或类似软件在服务器上预处理我的点数据吗?

似乎d3已经涵盖了:https://github.com/d3/d3-geo#geoContains

d3.geoContains(对象、点)

如果且仅当指定的GeoJSON对象包含指定的点时返回true,如果对象不包含该点则返回false。该点必须指定为以度为单位的双元素数组[经度,纬度]。对于点和多点几何图形,使用精确的测试;对于Sphere,总是返回true;对于其他几何形状,应用ε阈值。

扩展@thedude答案,如果需要对给定的geojson进行多次检查,也可以使用geojson查找。

Turf.js在多边形中提供了一个称为布尔点的函数

例如:

var pt = turf.point([-77, 44]);
var poly = turf.polygon([[
  [-81, 41],
  [-81, 47],
  [-72, 47],
  [-72, 41],
  [-81, 41]
]]);
turf.booleanPointInPolygon(pt, poly);
//= true