3

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

使用地理坐标系可能会在以后给开发人员带来复杂性。例如,PostGIS 不具备使用地理坐标系执行非点几何之间的距离计算的能力,例如,构建查询以查找存储为 WGS84 的县边界 5 英里内的所有点。[6]

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

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

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

更新

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

好处:数据文件是免费的

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

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

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

4

2 回答 2

3

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

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

于 2009-12-27T23:00:01.823 回答
0
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
于 2012-09-22T04:04:35.417 回答