【问题标题】:GeoDjango - Syntax for saving PointField?GeoDjango - 保存 PointField 的语法?
【发布时间】:2016-04-29 14:04:37
【问题描述】:

如果我从 Google Maps 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

来自我的用户的大多数查询将属于“向我显示距此点大约 20 公里范围内的所有点,并从最近到最远的顺序”。尽管数据在加拿大各地都有点,但用户只对任何给定查询的小区域内的点感兴趣,因此geometry PointField 足以满足 99% 的使用。

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

【问题讨论】:

    标签: geodjango


    【解决方案1】:

    通过查看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 格式。

    【讨论】:

      猜你喜欢
      • 2011-12-01
      • 2012-10-01
      • 1970-01-01
      • 2017-01-07
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多