我有包含区域多边形的.kml形状文件,我想要做的是找出特定的标记或点位于多边形内。我想在java中这样做。任何要解析.KML文件的库?
答案 0 :(得分:4)
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。
中定义答案 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