基本上,我想知道是否有一种方法可以使用postgis在django中的线串附近查询具有地理字段的所有对象。我正在计算一条路线,并希望找到大致位于该路线上的对象(例如距线串2m-10m的最大距离)。我找不到一种似乎可以解决此问题的在线方法。
我当然可以绕2m的路线创建一个间隔,然后使用这些间隔创建一个多边形并检查哪些点落在此创建的曲面内,但是我想知道是否有更直接的方法(我已经在上面描述过了。
这是我第一个描述的方法的psu代码(我想要的)
def get_objects_on_route():
Model.objects.filter(geo_location__some_lookup=all_points_in_route_route, max_distance=2m)
我可以实现的其他方法
def get_objects_on_route():
points_in_surface = []
for each element in route:
points_in_surface.append(two_corrected_points)
poly= Polygon(all_points_on_route)
Model.objects.filter(geo_location__covered_by=poly)
答案 0 :(得分:0)
事实证明,通过创建LineString
对象而不是Point
对象,您可以使用Django的PostGIS过滤轻松进行这种查询。
from django.contrib.gis.geos import LineString
line = LineString(*coords_in_route)
Model.object.filter(geo_location__distance_lte=(line, D(m=2)))
我对其进行了测试,并且似乎工作正常: