2016-10-14 59 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中定義。