У меня есть система, в которой пользователи помещают некоторые координаты (широта / долгота), мне нужно проверить, находятся ли заданные координаты в море или нет. Есть ли какая-нибудь услуга, которая могла бы дать мне ответ. Или это можно сделать с помощью карт Google.
Вы можете использовать Google Maps Geocode API .
Если ваш адрес находится на суше, result_type ответа будет что-то вроде «Administrative_area». если вы находитесь в море, ответ будет «natural_feature».
Вот два примера:
Изменить: еще несколько примеров в ответ на комментарии:
Я подумал об этом раньше.
Я бы не использовал веб-службу. но я бы использовал довольно простой образ.
Это изображение взято из http://www.vectorworldmap.com/vectormaps/vector-world-map-v2.2-blank.jpg
EDIT из замечательного комментария
Мне нравится решение, но я не уверен, что карта полностью точная или равноправная (с которой было бы проще всего работать). Как насчет этого? naturalearth.springercarto.com/ne3_data/8192/masks/water_8k.png
//КОНЕЦ
Если вам нужны карты с высоким разрешением, я бы получил очень большую карту и разделил ее на сетку меньших изображений, которую вы можете загрузить.
Если вам нужно быстро сделать эту систему супер-пупер. Я бы мог этот пиксель изображения для пикселя и создать базу данных этого материала, чтобы вы могли быстро найти его. Но уже этот снимок фактически действует как отличная база данных, которую можно легко проверить или изменить.
Тебе нужны океаны и озера?
Любопытно узнать, где вы собираетесь с этим, так как мне нравится эта проблема.
Джон.
Расширяясь по Джону Баллингеру, я успешно использовал этот трюк:
В php:
$lat = your latitude $lon = your longitude $im = imagecreatefrompng('http://maps.googleapis.com/maps/api/staticmap?center='.$lat.','.$lon.'&zoom=21&format=png&sensor=false&size=1x1&maptype=roadmap&style=feature:administrative|visibility:off&style=feature:landscape|color:0x000000&style=feature:water|color:0xffffff&style=feature:road|visibility:off&style=feature:transit|visibility:off&style=feature:poi|visibility:off'); //get pixel color, put it in an array $color_index = imagecolorat($im, 0, 0); $color_tran = imagecolorsforindex($im, $color_index); //if, for example, red value of the pixel is 0 we are on land if($color_tran['red']==0){ //do your thing echo "we are on land"; }