GeoDjango-保存PointField的语法?

dvt*_*tan 5 geodjango

PointField如果我具有从Google Maps API进行地理编码的经度和纬度,则保存的语法是什么?

GeoDjango文档缺少此类信息(感觉像他们仅为专业人士写了足够的细节才能有效地使用它),而我所发现的只是一个没有被接受的答案:如何分配给Django PointField模型属性?

对于上下文,这是我想要做的:

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

我的用户发出的大多数查询的类型都是“向我显示距离该点大约20公里的所有点,并从最远到最远对它们进行排序”。即使数据在加拿大各地都有点,用户对任何给定查询都只对小范围内的点感兴趣,因此geometryPointField可以满足99%的使用率。

如果需要以米为单位的距离测量(而不是简单地从最近到最远排序),则将使用geographyPointField。

小智 5

通过查看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')
Run Code Online (Sandbox Code Playgroud)

它表明任何可以转换为 GEOSGeomtery 的输入都可以。因此,您可以使用任何小部件(例如 TextField/HiddenField),但您返回的文本值应具有 WKT、HEX、WKB 或 GeoJSON 的语法。(https://docs.djangoproject.com/ja/1.9/ref /contrib/gis/geos/#creating-a-geometry)您链接到的示例(如何分配给 Django PointField 模型属性?)正在使用 WKT 格式。