问题:
我正在尝试使用Google Maps API V3将纬度/长度转换为最近的街道交叉点。此外,目前,这不一定非常准确 - 因为我只是试图匿名地址而不是提供方向。
我已经看到地理编码结果数据包含Address Component Type的“交集”,但这在返回结果中似乎并不一致 - 而且通常不是空白。
我还做了一些关于构建这个限制直接从谷歌获取它的最佳方法,并且我看到的最接近的是:How can I find the nearest intersection via the Google Maps API?,这并没有真正解决我的问题。鉴于此,我提出了自己的解决方案,并希望得到一些意见,优化,建设性批评或其他选择。
我的暂定解决方案:
在使用API之后,我决定尝试使用以下算法(仅针对上下文,这是在控制台应用程序中用C#编写的):
我拿一个地址并将其解析为纬度/经度。
然后我从中添加或减去一定数量的纬度或长度 坐标 - 按照城市街区的顺序(一个距离,根据你的情况调整) 纬度)并获得点之间的行走方向。我这样做是为了所有四个方向 - 所以第一个修改是保持纬度相同但减去一些经度。然后下一个修改是保持纬度并添加一些经度等。
获得指示后,我会解析结果并检查开始 和结束地址。如果它们不同,我会拿出街道名称 并将它们视为一个“交叉点”(即使有时候这样 导致平行的街道 - 再次只是试图得到一个球场。)
如果我找不到两条不同的街道,我会扩大最终目的地的距离并重复此过程。
到目前为止,这种方法运行良好,但显然它在时间和使用我分配的查询限制方面都是一个昂贵的过程。此外,我检查了API服务条款,只要我在其中包含免责声明并在Google地图上显示结果,我认为我没问题。
我对社区的问题是:
如何提高算法的效率?具体来说,在 我调用API的次数(实现代码不是 问题)
使用Google Maps API还有另外一种方法吗? 在SO问题referred to above中,解决方案是循环 超过建筑数量。我不确定那意味着什么 - 所以任何 澄清会很棒。
如上所述,我不相信这违反了服务条款 - 但我错了吗?
是否有其他基于网络的API可以更好地满足我的需求? 也许Bing,或其他一些提供商?
非常感谢您的帮助。
更新 我已经遇到了当天的查询限制,因此我今天无法针对Google测试任何建议,但我仍然愿意使用其他API。感谢。
答案 0 :(得分:1)
老问题,但由于原始海报声明他们对谷歌以外的解决方案持开放态度,因此Geonames为美国提供了一个网络API。请参阅GeoNames WebServices overview和http://www.geonames.org/maps/us-reverse-geocoder.html#findNearestIntersection