У меня есть система, в которой пользователи помещают некоторые координаты (широта/долгота), мне нужно проверить, находятся ли заданные координаты в море или нет. Есть ли какая-нибудь услуга, которая могла бы дать мне ответ. Или это можно сделать с помощью карт Google.
Мне нужно знать, что предопределенная точка находится в море или на земле
Ответ 1
Вы можете использовать Google GeoCode API.
Если ваш адрес находится на суше, result_type ответа будет что-то вроде "Administrative_area". если вы находитесь в море, ответ будет "natural_feature" .
Вот два примера:
- Первая точка - 0,0, в центре Атлантического океана: http://maps.google.com/maps/api/geocode/xml?address=0,0&sensor=false
- Вторая расположена в 20.012065, -6.82251, в середине пустыни Сахара: http://maps.google.com/maps/api/geocode/xml?address=20.012065,-6.82251&sensor=false
Изменить: еще несколько примеров в ответ на комментарии:
- Этот пункт расположен в море, заявленном Великобританией, в пределах 12 миль. Он показывает как "natural_feature" : http://maps.google.com/maps/api/geocode/xml?address=50.801541,0.424519&sensor=false
- Этот пункт расположен в озере Верхнее, в заливе Тандер. Он показывает как "natural_feature" : http://maps.google.com/maps/api/geocode/xml?address=48.23565,-86.981506&sensor=false
Ответ 2
Я подумал об этом раньше.
Я бы не использовал веб-службу. но я бы использовал довольно простой образ.
Это изображение взято из http://www.vectorworldmap.com/vectormaps/vector-world-map-v2.2-blank.jpg
ИЗОБРАЖЕНИЕ из замечательного комментария
Мне нравится решение, но я не уверен, что карта полностью точна или (что было бы проще всего работать). Как насчет вот этот? naturalearth.springercarto.com/ne3_data/8192/masks/water_8k.png
//END
- Я бы наметил карту/длину по этой карте для ноу-хау, чтобы вы знали, что ваша карта верна.
- Для любой точки выделения я бы нашел местоположение пикселя на этой карте и вычислил цвет (php может это сделать).
- Если цвет белый, я бы сказал, что это море, черный = земля.
- Если вы не хотите озер, откройте карту и покрасьте все черные озера.
Если вам нужны карты с высоким разрешением, я бы получил очень большую карту и разделил ее на сетку меньших изображений, которую вы можете загрузить.
Если вам нужно быстро сделать эту систему супер-пупером. Я бы мог этот пиксель изображения для пикселя и создать базу данных этого материала, чтобы вы могли быстро найти его. Но уже этот снимок фактически действует как отличная база данных, которую можно легко проверить или изменить.
Вам нужны океаны и озера?
Любопытно узнать, где вы собираетесь с этим, так как мне нравится эта проблема.
Джон.
Ответ 3
Развернувшись на Джона Баллингера, я успешно использовал этот трюк:
- Получите статическую карту с изображением google image 1x1 пикселя с центрированными координатами.
- Карта стиля в черный (земля) и белый (вода) с помощью стиля API Карт Google.
- Найдите, является ли пиксель черным или белым.
В 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";
}