【发布时间】:2011-10-25 20:35:31
【问题描述】:
我有一个活动数据库,每个活动可以举办3天,每天都有一个邮政编码。
所以数据库看起来像那样(+ 很多其他字段)
在另一个数据库中,我有一个地理位置信息(邮政编码、纬度、经度)
现在用户可以在那里输入邮政编码,然后会出现一个半径和该半径内的活动。
问题:
1 - 实现这一目标的最佳方法是什么?
考虑解决方案
查看活动中所有可能的邮政编码,并将其加入地理表以获取其纬度/经度
然后当用户搜索邮政编码时,获取 Lat/Lng 并做数学方程式以获取该点附近的所有邮政编码。
但我认为就性能而言这不是一个好方法,因为我必须将查询应用于 3000 多个活动
找到的距离代码
-
使用 MySQL(Haversine 公式)查找附近的位置
SELECT id, ( 3959 * acos( cos( 弧度(37) ) * cos( 弧度( lat ) ) * cos( 弧度( lng ) - 弧度(-122) ) + sin( 弧度(37) ) * sin ( 弧度( lat ) ) ) ) AS 距离 FROM 标记 距离
你们觉得呢?
【问题讨论】:
-
这里有一个类似的问题:stackoverflow.com/questions/3349808/…
标签: php mysql performance geocoding distance