优化地图搜索

时间:2011-09-08 14:50:51

标签: search optimization map coordinates

对于我们的一个客户,我们提供了一个系统,用于从用户邮政编码位置检索最近的N个地标。 我们有一个包含相应坐标(纬度和经度)的所有可用邮政编码(650,000+)的数据库,以及该国400多个地标。

目前我们正在使用以下过程找到最近的N个地标

  1. 检索所选邮政编码的lat和lng
  2. 获取所有地标的坐标
  3. 使用地理距离公式对其进行排序
  4. 使用以下过程获取最近的N + 2地标并获得它们的真实距离
    • 检查坐标之间的距离是否存储在距离缓存表中
    • 如果没有,它会转到地图引擎,检索距离并将其存储在缓存中
  5. 重新排序列表并返回前N个最接近的地标
  6. 问题是我们需要从数据库访问角度和第三方访问来优化这一点。

    我们已经尝试将所有zipcodes缓存到距离最近的M个地标的距离,但是该表将获得额外的6Gb数据,并且由于请求需要大约30秒才能填充大约250天。

    我们正在考虑对数据进行分区并将密切的邮政编码分组在一起,但这会使确切的距离无效。

    在这种情况下您会看到哪些优化解决方案。 谢谢。

2 个答案:

答案 0 :(得分:1)

你可以尝试重复的方法。

  1. 选择一个值作为“半径”
  2. 浏览所有结果并仅选择+ - 水平和垂直半径(根据地理位置
  3. 如果没有返回足够的行,请增加“radius”并重新开始
  4. 现在执行距离计算并使用PriorityQueue来最小化此类中使用的计算次数并选择所需的项目

答案 1 :(得分:1)

这应该在数据库级别完成。您应该使用具有地理扩展名的数据库作为SQL Server 2008 R2,或者使用具有PostGIS扩展的优秀开源选择PostGre SQL。有了那些存储地理BLOB而不是坐标的东西,并且有许多内置函数来计算地理位置,将为您处理第2步到第5步。

我建议你从这里开始: http://postgis.refractions.net/

此致

相关问题