【问题标题】:GeoDjango distance searchGeoDjango 距离搜索
【发布时间】:2010-12-28 14:53:24
【问题描述】:

我想使用 GeoDjango 进行基本的位置搜索。具体来说,我想给搜索功能一个邮政编码/城市/县,并找到 5mi、10mi、20mi 等范围内的所有邮政编码/城市/县。我在文档中找到了以下段落:

使用地理坐标系可能会给开发者带来一些麻烦。例如,PostGIS 无法使用地理坐标系执行非点几何之间的距离计算,例如,构建查询以查找存储为 WGS84 的县边界 5 英里内的所有点。 [6]

如果我想使用 PostGIS 并能够在美国进行上述搜索,这究竟意味着什么?文档建议使用投影坐标系仅覆盖特定区域。我需要覆盖整个国家,所以我认为这不是一个选择。

最终,我希望能够在给定起始位置和距离的情况下找到相邻的邮政编码/城市/县。我真的不在乎这在技术层面上是如何完成的。

我在哪里可以找到包含美国邮政编码/城市/县的地理边界的数据库,我可以将其导入 GeoDjango 模型?

更新

我找到了一个数据库,其中包含美国所有邮政编码的经纬度坐标here。我的计划是将这些点导入到 GeoDjango 模型中,并使用 PostGis 构建查询,以查找距给定点 x 英里内的其他点。这解决了文档中提出的问题,因为所有邮政编码都被视为点而不是多边形。这对我的用例来说很好,因为我不关心完美的准确性。

好处:数据文件是免费的

坏处:这些数据来自 2000 年的人口普查,因此已经过时了

有点希望:美国人口普查局每 10 年进行一次人口普查,时间快到 2010 年了

结论:对我来说已经足够了

【问题讨论】:

  • 如果你曾经发现过这个问题,看看你的代码的简短 sn-p 会很有帮助。不管怎样,谢谢你的帖子

标签: python django geodjango


【解决方案1】:

要绕过报价中的限制,您可以取用户提供的邮政编码区域的质心,然后从该点找到与从该点发出的 5、10 或任何英里圆相交的所有邮政编码区域.我不确定如何在 geodjango 中实现这一点,但使用 postgis 绝对有可能。

你引用的限制基本上是说你不能写一个查询“给我俄亥俄州边界内 5 英里范围内的所有点。”

【讨论】:

    【解决方案2】:
    In [1]: o = Place.objects.get(pk=2463583)  # Oakland, CA
    
    In [2]: sf = Place.objects.get(pk=2487956)  # San Francisco, CA
    
    In [3]: o.coords.transform(3410)  # use the NSIDC EASE-Grid Global projection
    
    In [4]: sf.coords.transform(3410)  # use the NSIDC EASE-Grid Global projection
    
    In [5]: o.coords.distance(sf.coords)  # find the distance between Oakland and San Francisco (in meters)
    Out[5]: 14401.942808571299
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 2015-02-12
      • 2012-06-20
      • 2011-01-18
      • 2012-09-08
      • 2015-07-16
      • 2017-04-02
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多