检查多边形内部或外部的一个点(纬度,经度)

Posted

技术标签:

【中文标题】检查多边形内部或外部的一个点(纬度,经度)【英文标题】:Check the a Point (Latitude, Longitude) inside Or Outside the Polygon 【发布时间】:2013-09-18 10:45:33 【问题描述】:

让我们考虑一个具有 N 个点的多边形 (P),每个点用纬度和经度表示。现在我想检查一个新点 P1(纬度和经度)是否在多边形内部/外部?

【问题讨论】:

Point in Polygon aka hit test的可能重复 【参考方案1】:

多边形内的点测试是一种通用算法,在许多地理空间库中以不同的编程语言实现。

JTS Topology Suite,例如,是 Java 中二维空间谓词和函数的强大开源 API。它提供了测试几何体(例如点)是否包含在另一个几何体(例如多边形)中的方法。

这是一个代码sn-p:

doube lat = ....; // latitude in decimal degrees
double lon = ...; // longitude in decimal degrees
Coordinate[] points = ... // construct/initialize points for polygon

// now construct the polygon and test the point
GeometryFactory gf = new GeometryFactory();
LinearRing jtsRing = gf.createLinearRing(points);
Polygon poly = gf.createPolygon(jtsRing, null);
Coordinate coord = new Coordinate(lon, lat);
Point pt = gf.createPoint(coord);
if (poly.contains(pt)) 
  // point is contained within polygon
 else 
  // point is NOT contained within polygon

contains() 几何谓词在JTS javadoc 中定义。

另见JTS project on github

【讨论】:

以上是关于检查多边形内部或外部的一个点(纬度,经度)的主要内容,如果未能解决你的问题,请参考以下文章

Android 地理围栏(多边形)

在一个国家/地区生成随机纬度/经度多边形?

来自自定义多边形 MySQL 的纬度经度搜索

Mongodb:如何检查一个点是不是包含在多边形中?

如何按纬度和经度(Postgis)从表中选择多边形

如何判断一个指定的经纬度点是不是落在一个多边形区域内