python - 为什么我包含的查询在 GeoDjango 的空间坐标中不起作用?

标签 python django geodjango

我正在尝试使用定义如下的多边形:

from django.contrib.gis.geos import Polygon

parcel = Parcel.objects.filter(objectid="22520").values()
geojson = parcel[0]['geom'].geojson
format_l = ast.literal_eval(geojson)
coordinates_data = format_l['coordinates'][0][0]

poly = Polygon(coordinates_data, srid=3492)
poly_parcel = poly.transform(4326, clone=True)
polygon = poly_parcel.coords
print(polygon)

polygon 然后包含如下所示:

 (((-121.49440799279022, 38.55725848782723),
  (-121.49438844924772, 38.557303481514126),
  (-121.4943760310021, 38.5573320694682),
  (-121.49436263531841, 38.557362909896675),
  (-121.49402385986245, 38.557269114460084),
  (-121.49406987333441, 38.55716268909225),
  (-121.49440799279022, 38.55725848782723)),)

我想在地 block 数据中找到主要数据,所以我尝试了这个:

 Primary.objects.filter(geom__contains=polygon).values()
 #and also tried with contained lookup
 Primary.objects.filter(geom__contained=polygon).values()

当我尝试这个查询时它抛出这个错误:

"ValueError: Cannot use object with type tuple for a spatial lookup parameter."

即使尝试使用列表,我也会遇到同样的错误...

最佳答案

让我们分析错误并从那里看(强调我的):

"ValueError: Cannot use object with type tuple for a spatial lookup parameter."

所以您正在尝试使用元组对象作为空间查找中的参数。如果您看到定义多边形的方式,很明显这是罪魁祸首:

(((-121.49440799279022, 38.55725848782723),
  (-121.49438844924772, 38.557303481514126),
  (-121.4943760310021, 38.5573320694682),
  (-121.49436263531841, 38.557362909896675),
  (-121.49402385986245, 38.557269114460084),
  (-121.49406987333441, 38.55716268909225),
  (-121.49440799279022, 38.55725848782723)),) # Defenitely a tuple!!!

当您尝试在空间查询中使用它时出现错误:

Primary.objects.filter(geom__contains=polygon).values()

我建议坚持使用 GeoDjango 的几何图形(您已经在使用它),如文档中所示,更具体地说,使用 GEOS Polygon :

  • 将您的多边形定义为 GEOS 多边形:

    from django.contrib.gis.geos import Polygon
    
    parcel = Parcel.objects.filter(objectid="22520").values()
    geojson = parcel[0]['geom'].geojson
    format_l = ast.literal_eval(geojson)
    coordinates_data = format_l['coordinates'][0][0]
    
    geos_poly = Polygon(coordinates_data, srid=3492)
    polygon = geos_poly.transform(4326, clone=True)
    
  • 在空间查询中使用此多边形:

    Primary.objects.filter(geom__contains=polygon).values()
    

关于python - 为什么我包含的查询在 GeoDjango 的空间坐标中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50907275/

相关文章:

python - 设置字段 `null=True` ,为什么在 ModelForm 中我仍然收到必需的错误?

python - Django: 'python manage.py syncdb' 不创建我的模式表

django-cities 数据导入不起作用

django - 将blocktrans输出分配给变量

python - GeoDjango OSMWidget坐标变化

python - 如何用 GeoDjango 计算两点之间的实际距离?

python - pandas.Series.apply 中的访问索引

python - 在 Python 中将单词解析为(前缀、词根、后缀)

python - 解析嵌套函数以提取Python中的每个内部函数

python - 如何在不区分大小写的cassandra中进行搜索?