【发布时间】:2012-11-17 16:15:09
【问题描述】:
我的网站上有一个本地企业数据库。
基本上我需要添加一个功能,用户可以在其中输入他们的地址和一个“最大距离”过滤器,并且只有在距离他们的地址返回的最大距离内的结果。
哪个库/程序/api/具有我需要的功能?
我研究了 google maps api,但这是不可行的,因为它们在距离矩阵计算上的配额非常严格,每天 2500 个元素。
【问题讨论】:
标签: mysql geolocation maps
我的网站上有一个本地企业数据库。
基本上我需要添加一个功能,用户可以在其中输入他们的地址和一个“最大距离”过滤器,并且只有在距离他们的地址返回的最大距离内的结果。
哪个库/程序/api/具有我需要的功能?
我研究了 google maps api,但这是不可行的,因为它们在距离矩阵计算上的配额非常严格,每天 2500 个元素。
【问题讨论】:
标签: mysql geolocation maps
您需要使用数据库的“空间”功能。如果您的数据库服务器不支持它,请尝试为它找到一个“空间”插件。我不知道是否可以使用 mySql。使用 SQL Server 和 PostGIS。
如果您的数据库是 SQL Server 2008,例如:
在地址表中添加一个“地理”字段,并添加一个带有每个本地企业的地理坐标(纬度、经度)的点:
INSERT INTO @addressTable (GeographyColumn) VALUES (geography:STGeomFromText('POINT(longitude,latitude)' , 4326))
(值 4326 表示 WGS84 坐标系(由您的 GPS 使用))
然后在查询时用客户端的坐标创建一个对象:
DECLARE @client geography
SET @client = geography::STPointFromText('POINT (longitude, latitude)', 4326)
SELECT *
FROM addressTable
ORDER BY Location.STDistance(@client)
【讨论】:
您可以获取两个地址的 latLong(使用 google maps api 上的 geoCoding),然后您可以将它们与 mysql 查询进行比较。
检查此Google search page 以获取有关如何进行 Stack Exchange 问题的列表
指定距离内的点或距离查找。
【讨论】: