Поиск атрибутов рядом с маршрутом (linestring) - PullRequest
0 голосов
/ 04 апреля 2019

В основном, я хочу знать, есть ли способ запросить все объекты с географическим полем, которые находятся рядом с линией строк в django, используя postgis.Я рассчитываю маршрут и хочу найти объекты, которые находятся приблизительно на этом маршруте (скажем, максимальное расстояние от линии трасс 2–10 м).Я не могу найти способ онлайн, который, кажется, решает эту проблему.

Я могу, конечно, создать интервал вокруг маршрута, скажем, 2 м, а затем создать многоугольник, используя эти интервалы, и проверить, какие точки попадают в этот созданныйПоверхность, но мне интересно, есть ли более прямой подход (как я описал выше).

Это некоторый код 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)

1 Ответ

0 голосов
/ 04 апреля 2019

Как выяснилось, вы можете легко выполнить этот вид запроса, используя фильтрацию PostGIS от Django, создав объект LineString вместо Point.

from django.contrib.gis.geos import LineString

line = LineString(*coords_in_route)
Model.object.filter(geo_location__distance_lte=(line, D(m=2)))

Я проверил и, кажется, работает правильно:

map with points along a route highlighred

...