mapbox如何在Java中检查线字符串是否与多边形相交
我正在尝试生成一个linestring
以避免在一个映射上出现多个polygons
,但是为了做到这一点,我需要一个方法来检查linestring
是否与polygon
相交。最初,我尝试使用此方法,该方法采用linestring
端点的坐标和多边形列表,以避免:
public boolean Intersects(Double endPosLng, Double endPosLat, List<Polygon> polygons) {
Boolean intersects = false;
Point end = Point.fromLngLat(endPosLng, endPosLat);
for (Polygon poly : polygons) {
if (TurfJoins.inside(end, poly)) {
intersects = true;
}
}
return intersects;
}
但是TurfJoins.inside(end, polygon)
只考虑linestring
的端点,因此直线可能会切割多边形的角(请参见下图),但仍然会在多边形外部结束,因此该方法不会将其检测为交点
我考虑过传递linestring
的先前坐标以生成linestring
的一部分,但我不认为Mapbox有一种方法可以检查linestring
是否在任何点与polygon
相交
如何检查linestring
是否与多边形相交
# 1 楼答案
首先,您的
Point
似乎是错误的point类。您应该使用java.awt.Point
,而不是使用任何GeoJSON库中的Point
。接下来,如果多边形没有大量边,只需检查直线是否与任何边相交: