【发布时间】:2017-02-23 18:10:21
【问题描述】:
我有 .kml 形状文件,其中包含区域多边形,我想做的是找出特定标记或点位于多边形内。我想在java中做到这一点。任何库都可以通过 .KML 文件进行解析?
【问题讨论】:
标签: java maps polygon kml point
我有 .kml 形状文件,其中包含区域多边形,我想做的是找出特定标记或点位于多边形内。我想在java中做到这一点。任何库都可以通过 .KML 文件进行解析?
【问题讨论】:
标签: java maps polygon kml point
JTS Topology Suite 是在地理空间上下文中正确计算几何关系的不错选择。可以使用 Java 库(例如 JAK 或 GIScore)轻松解析 KML,您可以在其中访问要素的坐标。
这是使用 JTS 测试地理空间点是否在多边形内的 Java 代码的 sn-p。
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 中定义。
【讨论】:
为了解析 KML 数据,这里有一个库(我用了两秒钟的谷歌搜索):https://github.com/micromata/javaapiforkml
要检查一个坐标是否落入一个形状中,库提供了一个方法(没有检查那个) - 或者,你可以从一个形状的坐标创建一个 Java AWT Polygon(只需处理它们作为二维表面上的点)。 Polygon 提供了一个 contains(Point2D) 方法。
https://docs.oracle.com/javase/7/docs/api/java/awt/Polygon.html
【讨论】: