首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -以geoJSON格式获取多边形的质心

Django -以geoJSON格式获取多边形的质心
EN

Stack Overflow用户
提问于 2016-10-17 10:04:21
回答 1查看 3.2K关注 0票数 3

我正在构建一个REST来管理与地理相关的数据。

我的前端开发人员希望以geoJSON格式检索多边形的质心,这取决于缩放级别。

我的多边形模型如下:

代码语言:javascript
复制
...
from django.contrib.gis.db import models as geomodels
class Polygon(geomodels.Model):
    fk_owner = models.ForeignKey(User, on_delete=models.DO_NOTHING, blank=True)
    external_id = models.CharField(max_length=25, unique=True) 
    func_type = models.CharField(max_length=15)
    coordinates = geomodels.PolygonField(srid=3857)
    properties = JSONField(default={}) 

API当前返回如下内容:

代码语言:javascript
复制
"type": "FeatureCollection",
"features": [
 {
     "type": "Feature",
     "geometry": {
         "type": "Polygon",
         "coordinates": [[[..]]]
      }
  }]

我使用rest_framework_gis.serializers.GeoFeatureModelSerializer来序列化我的数据。

我看到了以下获得质心的方法:

  1. 在我的模型中添加一个列质心:我不想这样做
  2. 创建模型的数据库视图: Django不管理数据库视图,我不想编写自定义迁移
  3. 使用相同的模型并向orm语句中添加一个extra(...):我试过了,但是在序列化中或序列化之前,事情变得很困难,因为在模型中,类型是Polygon__,而质心是Point__。错误如下: TypeError:无法设置值为的多边形SpatialProxy (多边形)

预期产出应是:

代码语言:javascript
复制
"type": "FeatureCollection",
"features": [
 {
     "type": "Feature",
     "geometry": {
         "type": "Point",
         "coordinates": [..]
      }
  }]

你的意见是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-19 09:20:20

您可以使用以下方法的组合:

  1. AsGeoJSON,它接受单个地理字段或表达式,并返回几何的GeoJSON表示。
  2. Centroid(),它接受单个地理字段或表达式,并返回几何图形的质心值。
  3. .annotate(),它用提供的查询表达式列表对QuerySet中的每个对象进行注释。 ..。 annotate()的每个参数都是一个注释,它将添加到返回的QuerySet中的每个对象中。

示例:

以下查询:

代码语言:javascript
复制
Polygon.objects.annotate(geometry=AsGeoJSON(Centroid('coordinates')))

将向'geometry'查询集添加一个名为Polygon的字段,该字段将包含根据给定模型的每个Polygon对象的coordinates字段计算的质心。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40083521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档