我正在研究这个话题。据我发现,您从 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 中的一个点转换为著名的 Google 投影 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 地图中显示点。我们可以使用这篇很棒的文章。
我已决定继续使用地理类型,将来我会转换它们,以防我需要提高性能。