GeoDjango - 保存 PointField 的语法?

5
如果我从Google Maps API获取了经度和纬度的地理编码,那么保存PointField的语法是什么?
GeoDjango文档缺乏这种信息(感觉他们只写了足够专业人士高效使用的详细信息),而我找到的所有内容都没有被接受的答案:如何分配给Django PointField模型属性? 为了更好地理解,以下是我尝试做的事情:
class Point(models.Model):
    geography = models.PointField(geography=True)
    geometry= models.PointField(srid=3348) #Statistics Canada Lambert projection

我的用户多数需要查询的是“显示距离此点大约20公里范围内的所有点,并按从近到远的顺序排序”的类型。虽然数据遍布加拿大,但用户只对每个查询中特定小地区内的点感兴趣,因此 geometry PointField 对于99%的用途已经足够。
如果需要以米为单位测量距离(而不仅仅是按最近到最远的顺序排序),则将使用 geography PointField。
1个回答

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')

它显示任何可以转换为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格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接