JAVA:点多边形?如何检查用户的位置是否在kml多边形内?

时间:2016-10-14 10:30:18

标签: java maps polygon kml point

我有包含区域多边形的.kml形状文件,我想要做的是找出特定的标记或点位于多边形内。我想在java中这样做。任何要解析.KML文件的库?

2 个答案:

答案 0 :(得分:4)

JTS Topology Suite是正确计算地理空间背景中几何关系的不错选择。可以使用诸如JAKGIScore之类的Java库轻松解析KML,您可以在其中访问要素的坐标。

以下是使用JTS测试地理空间点是否在多边形内的Java代码片段。

import org.locationtech.jts.geom.*;

// parse KML using JAK or another library
// ...
GeometryFactory gf = new GeometryFactory();
// create polygon
int numPoints = ...
Coordinate[] points = new Coordinate[numPoints];
// set points
points[0] = new Coordinate(...);
//...
LinearRing jtsRing = gf.createLinearRing(points);
Polygon poly = gf.createPolygon(jtsRing, null);

// now create point to test if contained inside polygon
Coordinate coord = new Coordinate(lon, lat);
Point pt = gf.createPoint(coord);
if (poly.contains(pt)) {
  // point is contained within bounds of polygon
  // do something here
}

contains()几何谓词在JTS javadoc

中定义

答案 1 :(得分:0)

要解析KML数据,这是一个库(用了两秒的谷歌搜索):https://github.com/micromata/javaapiforkml

要检查坐标是否属于某个形状,库是否提供了一种方法(没有检查) - 或者,你可以从一个坐标创建一个Java AWT Polygon。形状(只是将它们视为2D表面上的点)。 Polygon提供contains(Point2D)方法。

https://docs.oracle.com/javase/7/docs/api/java/awt/Polygon.html

相关问题