GeoDjango - 保存 PointField 的语法?

GeoDjango - Syntax for saving PointField?

如果我从 Google 地图 API 中对经度和纬度进行地理编码,那么保存 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

我的用户的大部分查询都属于 "Show me all points within roughly 20km from this point, and order them from nearest to furthest" 类型。即使数据点遍布加拿大,用户只对任何给定查询的小地区内的点感兴趣,因此 geometry 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),但您 return 的文本值应该具有 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 格式。