我需要知道预定点在海里或陆地上

Tor*_*ike 18 javascript php google-maps web-services coordinates

我有一个系统,用户放置一些坐标(纬度/经度),我需要检查指定的坐标是否在海中.有什么服务可以给我答案.或者是否可以使用谷歌地图这样做.

Viv*_*sse 19

您可以使用Google Maps Geocode API.

如果您的地址在陆地中,则响应的result_type将类似于"administrative_area".如果你在海里,反应将是"natural_feature".

这是两个例子:

编辑:回复评论的更多示例:

  • 这一点位于英国声称的海域,在12英里范围内.它显示为"natural_feature":http://maps.google.com/maps/api/geocode/xml?address = 50.801541,0.424519&theseor = false
  • 这一点位于雷湾的苏必利尔湖畔.它显示为"natural_feature":http://maps.google.com/maps/api/geocode/xml?address = 48.23565,-86.981506&theseor = false

  • 该死的,很好的答案! (3认同)
  • +1谷歌认为**一切**. (3认同)
  • +1非常好!只有一个潜在的障碍可以想到:一个国家或12英里区域内的海域 - 它们会显示为"行政区域"还是"自然特征"?那值得测试. (2认同)
  • @VivienBarousse 这个答案需要更新。在 API 和服务中使用“0,0”点都会返回“ZERO_RESULTS”。 (2认同)

Joh*_*ger 15

我曾经想过这个.

我不会使用网络服务.但我会用一个非常简单的图像. 替代文字

此图片来自 http://www.vectorworldmap.com/vectormaps/vector-world-map-v2.2-blank.jpg

编辑来自一个伟大的评论

我喜欢这个解决方案,但我不确定地图是完全准确的还是equirectangular(这将是最容易使用的).这个怎么样?naturalearth.springercarto.com/ne3_data/8192/masks/water_8k.png

//结束

  • 我会将lat/long映射到此地图上以获取知识点,以便了解您的地图是否正确.
  • 对于任何给定点,我会找到这个地图上的像素位置并找出颜色(php可以做到这一点).
  • 如果颜色是白色,我会说是海,黑=土地.
  • 如果你不想要湖泊,打开地图并将所有湖泊的颜色变黑.

如果你需要超高分辨率地图,我会得到一个非常大的地图,并将其划分为一个可以加载的较小图像网格.

如果你需要让这个系统超级快速.我想这个像素像素可以创建这个东西的数据库,这样你就可以很快地查找它.但是下面这张图片实际上是一个很容易检查或更改的优秀数据库.

你想要海洋和湖泊吗?

很想知道你要去哪里,因为我喜欢这个问题.

约翰.

  • +1聪明的解决方案.我今天学到了一些东西 (5认同)
  • 聪明!但是你需要先取下徽标:D (3认同)

小智 6

扩展John Ballinger,我成功地使用了这个技巧:

  • 获取以坐标为中心的1x1像素Google图片静态地图
  • 通过Google Maps API样式将样式映射到黑色(陆地)和白色(水)
  • 查找像素是黑色还是白色

在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";
}
Run Code Online (Sandbox Code Playgroud)