GeoDjango - 保存PointField的语法?

问题描述:

如果我有从Google Maps API进行地理编码的经度和纬度,那么保存PointField的语法如何?GeoDjango - 保存PointField的语法?

的GeoDjango内置文档缺乏这种信息(感觉像他们只写了足够的细节为专业人士使用它高效),和所有我发现这是不接受的答案:How to assign to a Django PointField model attribute?

为背景,这就是我想要做的事:

class Point(models.Model): 
    geography = models.PointField(geography=True) 
    geometry= models.PointField(srid=3348) #Statistics Canada Lambert projection 

大多数从我的用户查询的将是类型“从这个角度内大致20公里显示我的所有点,并命令他们从最接近最远”。即使数据点遍布加拿大,用户只对任何给定查询的小地区内的点感兴趣,所以PointField可以满足99%的使用量。

如果需要以米为单位的距离测量值(而不是简单地将它们从最近到最远排序),那么将使用geography PointField。

从在https://github.com/django/django/blob/master/django/contrib/gis/forms/fields.py查看源代码:

if not isinstance(value, GEOSGeometry): 
      try: 
       value = GEOSGeometry(value) 
      except (GEOSException, ValueError, TypeError): 
       raise forms.ValidationError(self.error_messages['invalid_geom'], code='invalid_geom') 

这表明,可以被转换为任何GEOSGeomtery输入都行。因此,您可以使用任何小部件(例如TextField/HiddenField),但是您返回的文本值应该具有WKT,HEX,WKB或GeoJSON的语法(https://docs.djangoproject.com/ja/1.9/ref/contrib/gis/geos/#creating-a-geometry) 您链接到(How to assign to a Django PointField model attribute?)的示例使用WKT格式。