我有一个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)
但是似乎我没有正确的方法。
请注意,我不想简单地计算与查询相交的区域子集,而要计算它们的精确交集(换句话说,所得多边形集应具有与查询完全相同的形状)。
[基本上,我们需要使用给定的annotate
来intersection
每个Region
的geom
的query
(如果有)。使用数据库查询来执行以下操作:
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)
)
查询说明:
Regions
空间查找过滤[ query
的intersects
。>使用intersects
表达式访问Intersection
,计算区域的Intersection
字段和geom
之间的query
的结果(有关我的问答示例,可以找到关于F()
用法的说明: F()
)geom
计算出的相交到每个对应的F()
中,作为名为How to execute arithmetic operations between Model fields in django的字段。annotate
将包含与annotate
几何图形相交的每个Region
,intersection_geom
字段包含相应交点的确切几何形状。