验证某个点是 Google 地图中的陆地还是水

..然后谷歌地图“将水与水分开”

好吧,不是在圣经的意义上,而是。

我想知道我有什么选择来验证[Lat,Lon]的点是陆地还是水。

谷歌地图显然有这些数据(水体是蓝色的) - 但是API中有什么东西可以用来做到这一点吗?如果不是 - 他们不是在服侍它,因为他们从未想过吗?还是因为它太复杂了?

我没有找到有关此事的任何信息 - 除了这里的一些类似问题(例如找到地形类型或海拔高度 - 但这并不是我需要的)。

有没有分离的层?一个选项?命令?还是我应该手动执行此操作?

我能想到的解决这个问题的唯一方法(如果我需要手动执行此操作)是检查每个服务磁贴的确切点 - 然后检查该Google地图色调的RGB值。这只是理论上的 - 因为在实践中 - 我不知道如何实现这一点,第一个障碍是我不知道如何将瓷砖上的像素位置转换为[LatLon]点,例如

现成的解决方案会容易得多。

请注意,我不需要世界上所有的水(例如 - 我不关心溪流,小池塘,大多数河流或邻居的游泳池。我需要一个人可以在没有浮动车辆帮助的情况下冒险的点)

编辑 I

阅读评论后:高程法不可靠,海平面以下的地方太多(http://geology.com/below-sea-level/ 可以看到这里“最深”10个的清单),海平面以上(湖泊)的内陆水体太多。反向地理定位方法不可靠,因为它会多次返回地缘政治实体,如城市或州或零。在提出问题之前,我已经研究了这些伪解决方案- 但它们都没有真正回答问题 - 这些方法充其量是糟糕的“猜测”。


答案 1

这是2种不同的方法,您可以尝试:

  • 您可以使用谷歌地图反向地理编码。在结果集中,您可以通过选中 来确定它是否是水。在水域中,类型为 。http://code.google.com/apis/maps/documentation/geocoding/#Types,请访问此链接了解更多信息typesnatural_feature

    此外,您需要检查要素的名称,如果它们包含与水域相关的其他一些单词,以提高准确性。例如,沙漠也是s。Sea, Lake, Oceannatural_feature

    优点 - 所有检测过程都将在客户端计算机上完成。无需创建自己的服务器端服务。

    缺点 - 非常不准确,您在水域获得“无”的机会非常高。

  • 您可以使用Google静态地图按像素检测水域/陆地。但为此,您需要创建http服务。

    以下是服务必须执行的步骤:

    1. 接收 和 从客户端接收。latitudelongitudecurrent zoom
    2. 向 Google Static Map 服务发送 latitudelongitudecurrent zoom'}&size=1x1&maptype=roadmap&sensor=false 请求。http://maps.googleapis.com/maps/api/staticmap?center={,}&zoom={
    3. 检测 1x1 静态图像的像素颜色。
    4. 响应有关检测的信息。

    您无法在客户端检测像素的颜色。是的,您可以在客户端计算机上加载静态图像并在元素上绘制图像。但是,您不能使用画布的上下文来获取像素的颜色。这受跨域策略的限制。canvasgetImageData

    Prons - 高精度检测

    缺点 - 使用自己的服务器资源进行检测


答案 2

对于任何当前的Google服务,这似乎都是不可能的。

但还有其他服务,如Koordinates Vector JSON Query服务!您只需查询 URL 中的数据,即可返回 JSON/XML 响应

示例请求:http://api.koordinates.com/api/vectorQuery.json?key=YOUR_GEODATA_KEY&layer=1298&x=-159.9609375&y=13.239945499286312&max_results=3&radius=10000&geometry=true&with_field_names=true

您必须注册并提供密钥和所选的层号。您可以搜索其所有可用图层的存储库。大多数图层只是区域性的,但您也可以找到全球图层,例如世界海岸线

enter image description here

选择图层时,单击“服务”选项卡,即可获得示例请求 URL。我相信你只需要注册,就是这样!

现在是最好的:

您可以上传您的图层!

它不是立即可用,嘿,必须以某种方式处理它,但它应该工作!图层存储库实际上看起来像是人们根据需要上传它们。