Python 如何查询5米范围内的所有数据?
我正在使用GeoDjango和PostGIS。然后,我陷入了如何查询我的postgres db表以获取5米范围内的所有数据的麻烦中 更新1 我正在使用GeoDjango 1.2.7 我从这个url找到了一些东西 Zipcode.objects.filter(poly_uudistance\u lte=(geom,D(*m*=5))) 但不知道如何准备参数和变量Python 如何查询5米范围内的所有数据?,python,postgresql,postgis,geodjango,Python,Postgresql,Postgis,Geodjango,我正在使用GeoDjango和PostGIS。然后,我陷入了如何查询我的postgres db表以获取5米范围内的所有数据的麻烦中 更新1 我正在使用GeoDjango 1.2.7 我从这个url找到了一些东西 Zipcode.objects.filter(poly_uudistance\u lte=(geom,D(*m*=5))) 但不知道如何准备参数和变量 什么是聚合距离?是函数吗 什么是几何图形?是一个变量吗?如何创建它 什么是D?是函数吗?如果是,m是D函数的参数名 我几天前刚做的 这是
我几天前刚做的 这是相当困难的,因为您应该创建一个地理位置,而不是一个几何图形点,以访问米单位 所以我只是在一个额外的where查询中做了这个
extra_where = '''
ST_Intersects(
the_geom, geometry(ST_Buffer(ST_GeographyFromText(\'%s\'), %f)))
'''
your_point = 'POINT(1 2)'
your_distance = 5 # meters
YourModule.object.filter(something).extra(where=extra_where%(your_point, your_distance))
请注意地理部分和缓冲区部分。一般来说,用于此类查询的最佳PostGIS功能是: 如果几何图形之间的距离在指定范围内,则返回true
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
Backend SQL Equivalent
PostGIS ST_DWithin(poly, geom, 5)
例如,居住在商店1000米范围内的所有客户#1:
ST_DWithin将使用您应该创建的空间索引,因此优于ST_Distance
在Django中,似乎有一个名为的对应过滤器:
返回从查找几何图形到几何图形字段的距离在给定距离内的模型
Zipcode.objects.filter(poly__dwithin=(geom, D(m=5)))
Backend SQL Equivalent
PostGIS ST_DWithin(poly, geom, 5)
D(m=5)返回长度为5米的距离对象
geom是要从中计算到Zipcode对象距离的几何体
z = Zipcode(code=77096, poly='POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))')
dwithin()是使用的函数
多边形是Zipcode对象的几何体属性
z = Zipcode(code=77096, poly='POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))')
poly
是Zipcode
模型中几何体字段的名称distance\u lte
只是一个查找过滤器,用于查找距离某个点一定距离内的对象
poly
字段的Zipcode
对象,需要定义点a。geom
就是该定义。例如,它可以是一个django.contrib.gis.geos.Point
。您可以设置该点的纬度和经度,并将其用作搜索圆的中心。在您获得的示例中,该中心被命名为geom
D
是一个类。更具体地说,它是名为Distance
的类的短别名。它们都可以在django.contrib.gis.measure
中找到。您可以使用各种实际距离度量(如公里、英里、米)创建此类的实例。在这种情况下,m代表仪表
from django.contrib.gis.measure import Distance, D
d1 = Distance(km=5)
print d1
d2 = D(mi=5) # `D` is an alias for `Distance`
print d2
5.0 mi
我有两(2)项澄清。。1) 你为什么不使用ST_距离(…)<5?我正在考虑使用ST_Distance(例如Zipcode.objects.filter(poly__Distance_lte=(geom,D(m=5))),但不知道如何准备参数。2) 我是Python GeoDjango的新手,请举例说明如何使用它,并说明如何准备参数值。@eros 1 ST_Distance测试了很多几何图形(如果不进行过滤,可能整个表中的所有几何图形),buffer和intersect的性能比我所尝试的要好。2我自己也是新手,我会尽快更新关于“几何”和“几何”的答案谢谢。我期待着看到你最新的答案。同时,感谢您考虑此次演出。我错过了那一点。问候。哦,我已经更新了。geometry是django和postgis中的一个几何字段,用于存储地图/位置/。。。对于任何地理数据,表的默认几何图形都是“the_geom”。将其替换为您自己的几何体字段名。您应该使用ST_DWithin而不是buffer+intersects解决方案。ST_DWithin将使用您应该创建的空间索引,因此性能优于ST_Distance。创建缓冲区几何体是不必要的开销。就像我之前发布的一样,
D
和geom
是什么m
是D
的参数名,不是吗<代码>多边形是重点吗\uu dwithin
是一个函数,不是吗?我试过了,但无法识别。D是编译错误。poly怎么样,是什么?谢谢你的回答。创建空间索引怎么样?你的意思是我需要做一些任务来创建它吗?如果是,怎么可能?任何关于如何使用空间索引+1来解释距离与内距离以及哪个更快的示例(因为django docs中距离和dwithin的语法和用法是相同的,并且没有给出任何使用的提示),请不要在标题中添加标签。