我正在研究这个主题。据我发现,从geopy库获得的坐标是SRID 4326格式,因此您可以将它们存储在几何字段类型中,而不会出现任何问题。这将是一个GeoDjango内置模型运用几何学的一个例子:
class Landmark(models.Model):
point = models.PointField(spatial_index = True,
srid = 4326,
geography = True)
objects = models.GeoManager()
顺便说一句,非常小心地经度/纬度传递给PointField,在正确的顺序。 geopy会返回纬度/经度坐标,因此您需要将其反转。
为了将一个坐标系中的点转换为另一个坐标系,我们可以使用GEOS和GeoDjango。在这个例子中,我将在4326变换点到著名的谷歌投影900913:
from django.contrib.gis.geos import Point
punto = Point(40,-3)
punto.set_srid(900913)
punto.transform(4326)
punto.wkt
Out[5]: 'POINT (0.0003593261136478 -0.0000269494585230)'
这样我们就可以存储在投影系统,这将有更好的表现数学坐标。 用于在管理站点界面中显示Google地图中的点。我们可以使用this great article。
我决定继续使用地理类型,未来我会转换它们,以防我需要提高性能。
只是为了澄清,你实际上是否遇到PostGIS的性能问题?如果您只是担心会发生什么,请拒绝过早优化!使用含有数百万条记录的表格的查询,人们可以获得良好的结果。更多关于距离查询:http://www.bostongis.com/?content_name = postgis_tut02#21 – tcarobruce 2010-08-23 17:53:53
嗯,我不确定我会称这种过早的优化(虽然我还没有性能问题)。我只需要知道GeoDjango将在必要时接受挑战。 我知道postGIS以及如何使用&&和重叠框改善距离查询,但是例如GeoDjango是否使用它?另一方面,我对精度并不是很挑剔,所以我不应该使用几何图形,因为它是有代价的。 – maraujop 2010-08-23 18:19:51