Найдите точку (LatLng) на расстоянии X метров / км от точки захвата (LatLng) и не должны находиться в воде (море) - PullRequest
0 голосов
/ 09 июля 2019

Мне нужно нарисовать кривую линию на карте Google от выбранной известной точки (LatLng) до расстояния около 200 метров.Точка (LatLng) после 200 м не должна быть в воде (море).Итак,

Как:

1.Найдите другую точку (LatLng) в 200 м от точки захвата.

2.Точка (LatLng) не должна находиться в воде (море).

enter image description here

Отредактированный вопрос:

Пожалуйста, игнорируйте «кривую линию».Это может быть прямая линия, основными проблемами являются 2 пункта, которые я упомянул выше.

1 Ответ

1 голос
/ 09 июля 2019

Это неполный ответ на несколько неоднозначный вопрос.

Вы указываете «кривую линию», но не указываете функцию кривой, поэтому невозможно предоставить конкретную помощь по этому вопросу.

Если под "кривой линией" вы подразумеваете окружность вокруг точки, вас может заинтересовать класс SphericalUtil в android-maps-utils , который обеспечивает поиск "смещений" (computeOffset) из точки - но это предполагает круг от центральной точки - что трудно применить к вашей неизвестной функции кривой.И конечно, сама карта предусматривает addCircle.

Кроме того, чтобы определить, находится ли какая-либо одна точка на поверхности Земли в воде, вы можете использовать Google Maps Reverse Geocoding, как в этом ответе: https://stackoverflow.com/a/9644812/2711811,В нем упоминается использование поля «type», которое является «natural_feature» для воды.

Но этот ответ оставляет открытым вопрос о том, «как найти точку не в воде в 200 метрах от центральной точки» без неопределенности,итеративный подход - (т.е. продолжать выбирать случайные точки до тех пор, пока они не окажутся в воде - что не удастся, если центральная точка находится на 150-метровом острове).Чтобы решить эту проблему, вам нужно ограничить свое пространство точек сушей, что означает знание земли / моря.

Пример случайной точки в 200 метрах от центральной точки:

SphericalUtil.computeOffset(pickupPoint, 200, new Random(System.currentTimeMillis()).nextDouble * 360)

Не стесняйтесьдобавить больше деталей к вашему вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...