我想使用GeoDjango进行基本的位置搜索。具体来说,我想给搜索函数一个邮政编码/市/县,并在5英里、10英里、20英里等范围内找到所有的邮政编码/市/县。我在文档中找到了以下段落:
使用地理坐标系统以后可能会给开发人员带来麻烦。例如,PostGIS不具备使用地理坐标系统在非点几何之间执行距离计算的能力,例如,构造一个查询来查找存储为WGS84的县边界5英里内的所有点。6
如果我想使用PostGIS并能够在美国进行上述搜索,这到底意味着什么?文档建议使用投影坐标系只覆盖特定的区域。我需要覆盖整个国家,所以我想这不是一个选择。
基本上,最后我希望能够找到邻近的邮政编码/市/县,给出一个起始位置和距离。我并不在乎这是如何在技术层面上完成的。
此外,在哪里可以找到一个包含美国邮政编码/市/县地理边界的数据库,可以导入到GeoDjango模型中?
更新
我找到了一个包含美国这里中所有邮政编码的纬度和经度坐标的数据库。我的计划是将这些点导入GeoDjango模型,并使用PostGis构造查询,这些查询可以在离给定点x英里的范围内找到其他点。这解决了文档中提出的问题,因为所有的ZIP代码都被视为点而不是多边形。这对于我的用例来说很好,因为完美的准确性不是我所关心的。
好处是:数据文件是免费的。
坏消息:这是2000年人口普查的数据,所以很过时。
多少有希望的是:美国人口普查局每10年进行一次人口普查,几乎是2010年
结论是:这对我来说已经足够了
发布于 2009-12-27 23:00:01
为了绕过引号中的限制,您只需取用户提供的zipcode区域的质心,然后从这一点开始查找所有与5、10或从该点发出的任何一英里圆相交的zipcode区域。我不确定如何在geodjango中实现这一点,但使用postgis绝对是可能的。
你引用的限制说,你不能写一个查询,上面写着“给我所有在俄亥俄州边界5英里以内的点。”
发布于 2012-09-22 04:04:35
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.942808571299https://stackoverflow.com/questions/1937960
复制相似问题