gpt4 book ai didi

python - 在 GeoDjango 中将多多边形层与多边形相交

转载 作者:行者123 更新时间:2023-11-29 13:38:48 33 4
gpt4 key购买 nike

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

我想计算此模型(表示存储在 PostGIS 中的一组多边形区域)与 GeoJSON 多边形“查询”的交集:

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)

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

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

最佳答案

本质上,我们需要用给定查询。使用数据库查询执行此操作如下所示:

from django.db.models import F
from django.contrib.gis.db.models.functions import Intersection
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.filter(geom__intersects=query).annotate(
intersection_geom=Intersection(F('geom'), query)
)

查询说明:

  1. 使用 intersects 过滤 queryRegions空间查找。
  2. 计算Intersection的结果在区域的 geom 字段和 query 之间,使用 F()访问 geom 的表达式(关于 F() 用法的解释可以在我的问答示例中找到:How to execute arithmetic operations between Model fields in django)
  3. annotate计算出的每个相应 Region 的交集作为名为 intersection_geom 的字段。

查询执行后,results 将包含与 query geom 相交的每个 Regionintersection_geom 包含相应交叉路口的精确几何形状的字段。

关于python - 在 GeoDjango 中将多多边形层与多边形相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58592957/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com