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