了解 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)
}
我试图了解给定点(纬度、经度)是否位于 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)
}