【发布时间】:2011-08-24 17:14:22
【问题描述】:
问题:
我正在尝试使用 Google Maps API V3 将纬度/经度反向地理编码到最近的街道交叉口。此外,就目前而言,这不必非常准确 - 因为我只是试图匿名地址而不是提供方向。
我已经看到地理编码结果数据包含“交叉点”的 Address Component Type,但这在返回结果中似乎完全不一致 - 并且通常不是空白。
我还对 SO 进行了一些研究,以寻找构建此禁止直接从 Google 获取它的最佳方法,而我所看到的最接近的是:How can I find the nearest intersection via the Google Maps API?,这并不能真正解决我的问题。鉴于此,我提出了自己的解决方案,并希望得到一些意见、优化、建设性的批评或其他选择。
我的初步解决方案:
在玩弄了 API 之后,我决定试一试以下算法(只是为了上下文,这是在控制台应用程序中用 C# 编写的):
我获取地址并将其解析为纬度/经度。
然后我从 坐标——按城市街区的顺序(根据您的情况调整距离 纬度)并获取点之间的步行方向。我最多对所有四个方向都这样做——所以第一个修改是保持纬度相同,但减去一些经度。然后下一个修改是保留纬度并添加一些经度等。
得到方向后,我解析结果并检查开始 和结束地址。如果它们不同,我会提取街道名称 并将它们视为“交叉点”(即使有时这 导致平行的街道 - 再次只是想获得一个球场)。
如果我没有找到两条不同的街道,我会扩大最终目的地的距离并重复该过程。
到目前为止,这运行得很好,但显然这是一个昂贵的过程,无论是在时间方面,还是在用完我分配的查询限制方面。另外,我检查了 API 服务条款,只要我包含他们的免责声明并在 Google 地图上显示结果,我认为我没问题。
我对社区的问题是:
如何提高算法的效率?具体来说,在 我调用 API 的次数(实现代码不是 问题)
是否有另一种方法可以使用 Google Maps API 完全做到这一点? 在 SO 问题referred to above 中,解决方案是循环 超过建筑数量。我不确定这到底是什么意思——所以任何 澄清会很棒。
如上所述,我不认为这违反了服务条款——但我错了吗?
是否有其他基于 Web 的 API 可以更好地满足我的需求? 也许是 Bing 或其他一些提供商?
非常感谢您的帮助。
更新: 我已经达到了当天的查询限制,因此我今天将无法针对 Google 测试任何建议,但我仍然愿意使用不同的 API。谢谢。
【问题讨论】:
标签: api google-maps geocoding reverse-geocoding