问题:
我正在尝试使用Google Maps API V3将lat/long地理编码到最近的街道交叉口.此外,目前,这不一定非常准确 - 因为我只是试图匿名地址而不是提供方向.
我已经看到地理编码结果数据包含地址组件类型 "交叉点",但这在返回结果中似乎并不一致 - 并且通常不是空白.
我还做了一些关于SO的最佳方法,以便直接从Google获取它,并且我最接近的是:如何通过Google Maps API找到最近的交叉点?,这并没有真正解决我的问题.鉴于此,我提出了自己的解决方案,并希望完全有一些意见,优化,建设性批评或其他选择.
我的暂定解决方案:
在使用API之后,我决定给出以下算法(仅用于上下文,这是在控制台应用程序中用C#编写的):
我拿一个地址并将其解析为lat/long.
然后我在坐标中添加或减去一定数量的纬度或长度 - 按照城市街区的顺序(根据纬度调整的距离)并获得点之间的行走方向.我这样做是为了所有四个方向 - 所以第一个修改是保持纬度相同但减去一些经度.然后下一个修改是保持纬度并增加一些经度等.
获得指示后,我解析结果并检查开始和结束地址.如果它们不同,我会将街道名称拉出来并将它们视为一个"交叉点"(尽管有时这会产生平行的街道 - 再次只是试图得到一个球场).
如果我找不到两条不同的街道,我会扩大最终目的地的距离并重复此过程.
到目前为止,这种方法运行良好,但显然它在时间和使用我分配的查询限制方面都是一个昂贵的过程.此外,我检查了API服务条款,只要我在其中包含免责声明并在Google地图上显示结果,我认为我没问题.
我对社区的问题是:
如何提高算法的效率?具体来说,我调用API的次数(实现代码不是问题)
还有另外一种方法可以使用Google Maps API完成此操作吗?在上面提到的SO问题中,解决方案是循环建筑数量.我不确定究竟是什么意思 - 所以任何澄清都会很棒.
如上所述,我不相信这违反了服务条款 - 但我错了吗?
是否有其他基于Web的API可以更好地满足我的需求?也许Bing,或其他一些提供商?
非常感谢您的帮助.
更新: 我已经遇到了当天的查询限制,因此我今天无法测试任何针对Google的建议,但我仍然愿意使用不同的API.谢谢.