【问题标题】:How can I filter the results of a database of addresses based on their distance from a specific address?如何根据地址与特定地址的距离过滤地址数据库的结果?
【发布时间】:2012-11-17 16:15:09
【问题描述】:

我的网站上有一个本地企业数据库。

基本上我需要添加一个功能,用户可以在其中输入他们的地址和一个“最大距离”过滤器,并且只有在距离他们的地址返回的最大距离内的结果。

哪个库/程序/api/具有我需要的功能?

我研究了 google maps api,但这是不可行的,因为它们在距离矩阵计算上的配额非常严格,每天 2500 个元素。

【问题讨论】:

    标签: mysql geolocation maps


    【解决方案1】:

    您需要使用数据库的“空间”功能。如果您的数据库服务器不支持它,请尝试为它找到一个“空间”插件。我不知道是否可以使用 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)
    

    【讨论】:

    • MySQL 内置了空间支持。对于这个简单的问题,我认为这将是一个矫枉过正的问题。
    【解决方案2】:

    您可以获取两个地址的 latLong(使用 google maps api 上的 geoCoding),然后您可以将它们与 mysql 查询进行比较。
    检查此Google search page 以获取有关如何进行 Stack Exchange 问题的列表 指定距离内的点或距离查找。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      相关资源
      最近更新 更多