我有包含区域多边形的.kml形状文件,我想要做的是找出特定的标记或点位于多边形内部。我想用java做这件事。有没有可以解析.KML文件的库?
发布于 2016-10-14 23:09:53
JTS Topology Suite是在地理空间环境中正确计算几何关系的一个很好的选择。可以使用JAK或GIScore等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中定义。
发布于 2016-10-14 18:43:19
为了解析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
https://stackoverflow.com/questions/40040983
复制相似问题