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格式。