如何在ios中获取附近城市或州名的水中地名?

时间:2014-05-09 07:41:29

标签: ios geolocation location google-places-api reverse-geocoding

我正在开发一个基于位置的应用程序,我需要在其中获取用户选择的任何地理点的附近位置名称。我正在使用Google Places API这对我来说很好。

唯一的问题是服务会为水中的地理位置返回null。有什么方法可以找回水或海洋中的地理位置附近的位置吗?

1 个答案:

答案 0 :(得分:2)

AFAIK API无法做到这一点。 所以,按照需要的努力,你有两个选择:

  1. 当用户点击水时,只需抛出一个对话框“请选择一个 在土地上点“。接下来不费吹灰之力,会略微惹恼用户。
  2. 尝试自己找到最近的陆地地点并使用它来运行API请求 (而不是原始点)。以下是一些想法。
  3. 一个好的方法可以基于this answer:基本上你可以得到一个带有地面多边形的KML文件。出于性能原因,您可以将多边形简化到对缩放级别有意义的范围。现在,如果你的观点是那些多边形中的一个 - 那就是大海。您可以简单地遍历所有多边形边缘并选择最接近您的点的那个边缘,然后在其上选择一个点 - 再次最接近您的点 - 并且朝向多边形的外部做一个小的epsilon大小的步骤以获得土地指出你可以做一个地理编码请求。此外,原作者建议您可以使用Haversine公式来确定近地点 - 我并不熟悉那个地方的设备。

    缺点是,您必须处理KML,迭代大量多边形并优化它们(除了marineregions.org数据和Google地方数据之间可能存在的差异外,还会失去精确度)

    你可以尝试的另一个很酷的技巧是在可见地图片段上使用Sobel Filter [边缘检测]来确定海岸线的位置(虽然你会得到一些误报),然后跟踪它(如 raster-> vector )以类似于前一种方法的方式获得一些点和边来计算最接近的陆地位置。这是一个笨拙的想法enter image description here

    对于Sobel边缘检测,考虑GPUImage lib - 它们已经实现了滤波器,并且由于lib在GPU上完成所有计算,因此它可能会快速工作。

    UPD 原来还有一个名为Koordinates的服务,其海岸线数据可用,请查看the answer here