【问题标题】:Calculate cities with radius of zipcode计算邮政编码半径的城市
【发布时间】:2014-12-10 19:47:52
【问题描述】:

我的系统中有用户,每个用户都与一个邮政编码相关联。他们将在我的数据库中搜索门票,每张门票都与特定位置相关联。这个位置也有一个邮政编码。当他们对数据库运行票证查询时,我们希望过滤结果以仅包含位置在卖家邮政编码特定半径范围内的票证。

我找到了一些数据库,可以为我提供邮政编码和城市的纬度/经度。我的问题是:运行上述查询的最佳方法是什么?什么工具合适?

我目前正在使用 Python 和 Django。 GeoDjango 看起来很可能,但它是重量级的,并且附加到 PostGIS 的 GPL V2.0 许可证非常严格。或者,我可以在应用程序服务器上完成所有工作,但这需要我的搜索始终将一个城市与数据库中的每个城市进行比较,因为从数据库返回的结果永远不会按位置进行过滤。对实现这一目标的最佳方式有何想法?

谢谢

【问题讨论】:

  • PostGIS 的 GPL 许可无关紧要,因为它是您正在使用的单独软件,您不是在制作衍生作品

标签: python django postgresql postgis geodjango


【解决方案1】:

如果你想避免沉重的 GIS 东西,并且你的半径是静态的,我会创建一个查找表:对于每个 ZIP,给我那些被认为“足够近”的 zip。

要计算这个查找表,你必须做一些 GIS 工作;但这可以离线完成,您可以使用其他服务(例如 OSM 或 google geolocation)。

【讨论】:

  • 我也曾考虑过预先计算所有距离。这是一个典型的解决方案吗?我会检查 OSM 和谷歌地理位置
  • 如果您的半径是静态的(足够)并且您不介意加减几英里,那么这是一个典型的、强大的、易于理解且易于实施的解决方案,您可能会赢't,因为那样你就不会首先使用拉链。典型的成熟解决方案需要地理空间 GIS。
  • 这听起来不错。我们不需要非常高的准确度,我想我总是可以不时地重新计算查找表以考虑数据的变化。
  • 将查找表存储在内存中的缓存中还是数据库中?
  • 取决于您如何生成它...就个人而言,我会将其放入 JSON 文件并在启动时将其读入内存 - 但将其放入数据库中也可以。
猜你喜欢
  • 2013-08-16
  • 2014-01-27
  • 1970-01-01
  • 2013-04-05
  • 2021-12-24
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多