2016-10-14 57 views

回答

0

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

要检查坐标落入的形状,无论是图书馆提供了一个方法(没有检查) - 或者,您可以从形状的坐标(仅将它们视为2D表面上的点)创建Java AWT PolygonPolygon提供了contains(Point2D)方法。

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

+1

如果多边形包裹国际日期线或两极,那么AWT多边形将不会始终工作。在这些情况下,需要一个地理空间库,如[JTS Topology Suite](http://tsusiatsoftware.net/jts/main.html)。请参阅[包含](http://tsusiatsoftware.net/jts/javadoc/com/vividsolutions/jts/geom/Geometry.html#contains(com.vividsolutions.jts.geom.Geometry))。 – JasonM1

+0

@JasonM你绝对是对的。 –

+0

AWT形状呈现平坦的表面。大地测量计算不是一个好主意。 – VGR

0

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

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

import com.vividsolutions.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中定义。