Поймите, содержит ли GeoJsonLayer заданную точку - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь понять, находится ли данная точка (Широта, Долгота) внутри 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
            ]
          ]
        ]
      }
    }

У всех естьПодсказка?Спасибо

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

@ Мартин Цайтлер, спасибо, что поставили меня на правильный путь.Мой 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)
    }
0 голосов
/ 30 ноября 2018

это довольно теоретический вопрос, если только вы не знаете, какой тип геометрии присутствует - потому что геометрия не обязательно является многоугольником, который может содержать точку.иначе можно было бы только проверить, совпадает ли точка точно.фундаментальная проблема заключается в том, что .getBoundingBox() возвращает прямоугольник, а не многоугольник, что не позволяет надлежащего сопоставления из-за окружающей избыточной области.

например.для построения многоугольника потребуется (как минимум) 3 геометрии типа точки.

или (как минимум) 1 геометрия типа многоугольника ... которые можно сопоставить с Utility Library * s PolyUtil :

PolyUtil.containsLocation(position)

Всего имеется 10 различных геометрических объектов для объекта-объекта, которые необходимо учитывать ... это то, что RFC 7946 подсказки для.

...