AFAIK API не имеет никакого отношения к этому. Итак, у вас есть два варианта, в порядке усилий он принимает:
- Когда пользователь вводит воду просто бросить диалог, сообщающий «Пожалуйста, выберите
точки на земле». Не прилагая никаких усилий и немного раздражающий пользователя.
- Попробуйте сами найти ближайший земельный геоинтеграл и использовать его для запуска запроса API на (вместо исходной точки). Ниже приведены некоторые идеи.
Хороший подход может быть основан на this answer: в основном вы можете получить файл KML с наземными полигонами. По соображениям производительности вы можете упростить полигоны в той степени, которая имеет смысл для уровней масштабирования. Теперь, если ваша точка находится в одном из этих полигонов - это море. И вы можете просто перебрать все края многоугольника и выбрать тот, который ближе всего к вашей точке, а затем выбрать точку на ней - еще ближе к вашей точке - и сделать один маленький шаг размером с эпсилон к внешней стороне полигона, чтобы получить землю вы можете выполнить запрос геокода. Кроме того, оригинальный автор предлагает вам использовать формулу Хаверсина для определения ближайшей точки суши - я не очень хорошо знаком с этим устройством.
Недостатком является то, вы должны иметь дело с KML, перебрать много полигонов и оптимизировать их (и потерять точность делает, что, в дополнение к возможным различиям между marineregions.org данными и данными Google Places)
Еще один крутой трюк, который вы могли бы попробовать, это использовать Sobel Filter [обнаружение края] на фрагменте видимой карты, чтобы определить, где находится береговая линия (хотя вы получите там некоторые ложные срабатывания), затем проследите его (как в растра-> вектор), чтобы получить некоторые очки и края для вычисления ближайшего местоположения земли, аналогично первому подходу. Вот неуклюжий рисунок идеи
Для обнаружения края Sobel рассмотрите GPUImage lib - у них есть фильтр, и он, вероятно, будет работать безумно быстро, так как lib выполняет все вычисления на графическом процессоре.
UPD Оказывается, есть также сервис под названием Koordinates, который имеет данные береговой линии доступны, проверить the answer here