【问题标题】:JAVA : Point in polygon? How can I check if a user's location falls within a kml polygon?JAVA:多边形中的点?如何检查用户的位置是否在 kml 多边形内?
【发布时间】:2017-02-23 18:10:21
【问题描述】:

我有 .kml 形状文件,其中包含区域多边形,我想做的是找出特定标记或点位于多边形内。我想在java中做到这一点。任何库都可以通过 .KML 文件进行解析?

【问题讨论】:

    标签: java maps polygon kml point


    【解决方案1】:

    JTS Topology Suite 是在地理空间上下文中正确计算几何关系的不错选择。可以使用 Java 库(例如 JAKGIScore)轻松解析 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 中定义。

    【讨论】:

    • JTS 仍然是执行此计算的最佳选择吗?还是 Spatial4j 现在是更好的候选者?
    • Spatial4J 中的多边形通过包装 JTS 的几何图形来支持。
    • 好的,谢谢@JasonM1!我还有一个问题:结果总是正确的吗?我的意思是它是平均正确还是完全正确?我有一种感觉,因为地理空间数学似乎非常复杂,所以结果可能会不好。
    • 如果点和多边形的坐标使用相同的参考坐标系(例如 WGS84),那么数学应该是正确的。如果您需要高度的准确性,那么建议您查看源代码和/或文档以确保准确性。例如,如果多边形中点之间的长度很大,那么这本身可能会引入错误。
    【解决方案2】:

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

    要检查一个坐标是否落入一个形状中,库提供了一个方法(没有检查那个) - 或者,你可以从一个形状的坐标创建一个 Java AWT Polygon(只需处理它们作为二维表面上的点)。 Polygon 提供了一个 contains(Point2D) 方法。

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

    【讨论】:

    • 如果多边形包裹国际日期变更线或两极,那么 AWT 多边形将不会总是有效。在这些情况下,需要一个地理空间库,例如JTS Topology Suite。见contains
    • AWT 形状采用平面。对于大地测量计算来说不是一个好主意。
    猜你喜欢
    • 1970-01-01
    • 2015-05-16
    • 2011-06-17
    • 2013-02-22
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    相关资源
    最近更新 更多