在GeoDjango中将多边形与多边形相交

问题描述 投票:0回答:1

我有一个Region GeoDjango模型(从django.contrib.gis.db.models.Model派生,带有geom字段,即django.contrib.gis.db.models.MultiPolygonField

我想用GeoJSON多边形“查询”计算该模型的交集(代表PostGIS中存储的一组多边形区域:

from django.contrib.gis.geos import GEOSGeometry

query = GEOSGeometry(
    '{"type":"Polygon","coordinates":[[[-80.983786,43.929011],[-80.511513,43.778458],[-80.291852,44.079184],[-80.775108,44.232127],[-80.983786,43.929011]]]}'
)

我尝试了很多事情:

results = Region.objects.all().intersection(query) 

from django.contrib.gis.db.models.functions import Intersection

results = Intersection(Region.objects.all(), query)

但是似乎我没有正确的方法。

请注意,我不想简单地计算与查询相交的区域子集,而要计算它们的精确交集(换句话说,所得多边形集应具有与查询完全相同的形状)。

python postgis geodjango
1个回答
0
投票

[基本上,我们需要使用给定的annotateintersection每个Regiongeomquery(如果有)。使用数据库查询来执行以下操作:

from django.db.models import F
from django.contrib.gis.db.models.functions import Intersection    

results = Region.objects.filter(geom__intersects=query).annotate(
    intersection_geom=Intersection(F('geom'), query)
)

查询说明:

  1. 使用Regions空间查找过滤[ queryintersects。>使用intersects表达式访问Intersection,计算区域的Intersection字段和geom之间的query的结果(有关我的问答示例,可以找到关于F()用法的说明: F()
  2. [geom计算出的相交到每个对应的F()中,作为名为How to execute arithmetic operations between Model fields in django的字段。
  3. 执行查询后,annotate将包含与annotate几何图形相交的每个Regionintersection_geom字段包含相应交点的确切几何形状。
© www.soinside.com 2019 - 2024. All rights reserved.