Как мне найти все точки из трека A на расстоянии и во времени из всех точек трека B, в частности, на SQL сервере - PullRequest
0 голосов
/ 29 мая 2020

SQL Server 2016.

У меня есть два разных трека транспортных средств, каждый из которых определен с использованием геометрии точек в SRID / EPSG 4326. Каждая точка имеет поле даты и времени. Я пытаюсь найти все точки из трека A, которые находятся в пределах заданного расстояния точек от трека B, но добавляю ограничение по времени. Так, например, для каждой точки в A, какие точки в B находятся в пределах 1 км и 5 минут от A.

Basi c таблица позиций выглядит так:

table positions (
  vid int, -- vehicle identifier
  dtg datetime,
  lat float,
  lon float,
  pos geometry
)

Это звучит для меня как проблема ближайшего соседа, но мне нужно запустить ее для всех точек в A по всем точкам в B, а не только для всех точек в таблице или дорожке и в одном месте.

Я обеспокоен о необходимости выполнять запрос STDistance в al oop, равном количеству точек в дорожке A для сравнения с точками в B. Может ли кто-нибудь помочь мне понять этот запрос и найти эффективное решение?

Дополнительная информация:

Поскольку в настоящее время у меня нет доступа к базе данных, я перечислил некоторые точки с позиций самолетов, которые у меня уже были.

vid,time,lat,lon
DAL476,2017-11-26 15:36:28-05,33.633333,-84.45
DAL435,2017-11-26 15:42:46-05,33.65,-84.35
DAL435,2017-11-26 15:43:16-05,33.649444,-84.36
DAL435,2017-11-26 15:43:52-05,33.65,-84.4
DAL435,2017-11-26 15:44:18-05,33.649444,-84.403611
DAL843,2017-11-26 10:51:03-05,33.633333,-84.466667
DAL843,2017-11-26 10:51:21-05,33.633333,-84.483333
DAL202,2017-11-26 12:36:03-05,33.633333,-84.45
DAL202,2017-11-26 12:36:39-05,33.633333,-84.483333
DAL202,2017-11-26 12:37:10-05,33.617778,-84.511944
DAL488,2017-11-26 13:38:58-05,33.633333,-84.366667
DAL488,2017-11-26 13:39:58-05,33.631667,-84.409722
DAL420,2017-11-26 13:51:27-05,33.633333,-84.45
DAL420,2017-11-26 13:52:21-05,33.616667,-84.5

Итак, следуя моим В процессе импорта я сначала импортирую информацию о треке в таблицу базы данных. Затем запустите запрос на обновление, чтобы заполнить поле геометрии

UPDATE positions SET pos = geometry::Point(lon, lat, 4326)

С заполненной таблицей для каждого полета (vid) я хотел бы найти все точки на его маршруте, которые находятся в пределах 10 км от любого точки на треках других рейсов.

Игнорируя требование временного ограничения, я бы хотел увидеть что-то вроде:

track1,time1,track2,time2,distance_km
DAL476,2017-11-26 15:36:28-05,DAL202,2017-11-26 12:36:03-05,1
DAL476,2017-11-26 15:36:28-05,DAL843,2017-11-26 10:51:03-05,1
DAL476,2017-11-26 15:36:28-05,DAL420,2017-11-26 13:51:27-05,1
DAL202,2017-11-26 12:36:03-05,DAL420,2017-11-26 13:51:27-05,1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...