我需要一个免费(开源)的解决方案,给定纬度/经度可以返回最近的城市/州或邮政编码。 mysql 不是一个选择,如果可能的话,小型轻量级数据库将是最好的。
更新:没有网络服务,每天有 5000 万次展示,即使是最小的插件也会造成伤害,因此添加服务请求会缩短响应时间。我不想在请求中添加超过 200 毫秒的时间。
我有数据库,csv 格式的纬度/经度/邮政编码/城市/州,它只是如何存储,更重要的是如何最快地检索它。
暴力破解:将所有数据预加载到数组中。计算当前点与数组中每个点之间的距离(有一种方法可以使用线性代数而不是三角函数来进行此计算,但我不记得它是什么)以找到最近的点。
请在投反对票之前阅读此内容:有很多方法可以加速像这样的强力搜索,但我发现它们通常不值得麻烦。我以前不仅使用过这种方法从纬度/经度查找最近的邮政编码,而且还在 Windows Mobile 应用程序中使用过它(其中处理能力并不是完全压倒性的)并且仍然实现了亚秒级搜索时间。只要避免使用三角函数,这并不是一个昂贵的过程。
更新:您可以通过将邮政编码数据分配到子区域(象限,例如西北、东南等)并保存每个数据点的区域 ID 来加快搜索时间。然后,在搜索中,您首先确定当前位置所在的区域,然后仅与这些数据点进行比较。
为了避免边界错误(例如当您的当前位置靠近其区域边缘但实际上最接近邻近区域中的邮政编码时),您的区域应该在某种程度上重叠。这意味着您的一些邮政编码记录将被重复,因此您的整体数据集会更大一些。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)