应用程序如何执行附近搜索?例如,用户输入邮政编码,然后应用程序按接近程度列出所有距离20英里以内的企业。
我想在PHP和MySQL中构建类似的功能。这种方法正确吗?
- 获取我感兴趣的位置的地址并将其存储在我的数据库中
- 使用Google的地理编码服务对所有地址进行地理编码
- 编写包含Haversine公式以执行附近搜索和排序的数据库查询
这样可以吗?在第3步中,我将为每个查询计算接近程度。是否最好拥有一个PROXIMITY表,列出每个企业与几个参考位置之间的距离?
应用程序如何执行附近搜索?例如,用户输入邮政编码,然后应用程序按接近程度列出所有距离20英里以内的企业。
我想在PHP和MySQL中构建类似的功能。这种方法正确吗?
这样可以吗?在第3步中,我将为每个查询计算接近程度。是否最好拥有一个PROXIMITY表,列出每个企业与几个参考位置之间的距离?
我们使用这个来计算成千上万的点。如果你在SQL中执行此操作,对纬度和经度列建立索引非常重要。我们尝试在 SQL 2008 中使用空间索引进行此操作,但实际上并没有看到预期的性能提升。但是,如果您想计算距离某个邮政编码一定距离内的点,请考虑使用邮政编码的质心或多边形表示。
Haversine公式是一个很好的起点。
我们没有在现场计算距离时遇到性能问题,但对于一些应用程序,我们会提前计算距离,因为我们已知点的位置,并且将有数百万条记录。
SELECT
[DistanceRadius]=
69.09 *
DEGREES(
ACOS(
SIN( RADIANS(latitude) )*SIN( RADIANS(@ziplat) )
+
COS( RADIANS(latitude) )*COS( RADIANS(@ziplat) )
*
COS( RADIANS(longitude - (@ziplon)) )
)
)
,*
FROM
table
) sub
WHERE
sub.DistanceRadius < @radius