了解 GeoJsonLayer 是否包含给定点

Understand if a GeoJsonLayer contains a given point

我试图了解给定点(纬度、经度)是否位于 GeoJsonLayer 内。我已经编写了这个函数,但是我没有图层的边界框,所以它不起作用:

private fun isInsideLayer(userLatitude: Double, userLongitude: Double, layer: GeoJsonLayer): Boolean {
        val position = LatLng(userLatitude, userLongitude)
        return layer.boundingBox.contains(position)
    }

下面是我的 JSON 来源。

 {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              13.36761474609375,
              52.626602989514865
            ],
            [
              13.379974365234373,
              52.616181784632865
            ],
            [
              13.380317687988281,
              52.606175093642754
            ],
            [
              13.36761474609375,
              52.626602989514865
            ]
          ]
        ]
      }
    }

有人知道吗?谢谢

这是一个相当理论性的问题,除非知道存在哪种几何形状 - 因为几何形状不一定是多边形,多边形可能包含一个点。否则只能检查一个点是否完全匹配。根本问题是 .getBoundingBox() returns 一个矩形 - 而不是多边形,由于周围的多余区域,它不允许正确匹配。

例如。为了构造一个多边形,需要(至少)3 个点类型的几何图形。

或(至少)1 个多边形类型的几何图形...可以与 Utility Library's PolyUtil:

匹配
PolyUtil.containsLocation(position)

一个要素对象总共有 10 个不同的几何对象,需要考虑...RFC 7946 提示。

@Martin Zeitler,谢谢你让我走上了正确的道路。 我的 JSON 来源实际上包含一个多边形(问题中添加的来源)。因此,通过执行以下操作很容易从要素中获取多边形:

private fun getPolygon(layer: GeoJsonLayer): GeoJsonPolygon? {
        for (feature in layer.features) {
            return feature.geometry as GeoJsonPolygon
        }
        return null
    }

之后,使用 PolyUtil 可以很简单地确定任意点是在多边形内部还是外部,方法是:

 private fun isInside(pointLatitude: Double, pointLongitude: Double, layer: GeoJsonLayer): Boolean {
        val polygon: GeoJsonPolygon? = getPolygon(layer)
        return PolyUtil.containsLocation(pointLatitude, pointLongitude, polygon!!.outerBoundaryCoordinates, false)
    }