Позвольте мне пояснить прилагаемое изображение. Желтая линия, обозначенная как «Планирование строительства», обозначенная идентификатором планирования, и все другие цвета, обозначенные как «Строительный сегмент», обозначенные идентификатором сегмента . Я пытаюсь использовать функцию STDistance
точек географии, чтобы найти SegmentId=12689
и SegmentId=12687
, передавая PlanningID=25801
. Моя программа должна возвращать значения 12689
и 12687
, поскольку эти два целиком l ie в пределах PlanningID=25801
. Однако следует исключить значение SegmentId=12688
, поскольку этот сегмент не ie полностью или большая часть сегмента не входит в план строительства. Я создал следующий скрипт на SQL сервере
declare @Planningid INT
declare @agencyID int
set @Planningid=25801
set @agencyID=79
DECLARE @finalresult int
DECLARE @result TABLE (id INT, starting sys.geography, ending sys.geography,
chachedroute sys.geography)
DECLARE @tablevar TABLE(id INT)
insert into @result select id,
starting,Ending,CachedRoute from Route R where AgencyId=@agencyID and LayerId=1
and CachedRoute.STDistance((select CachedRoute from route
where id=@Planningid))<0.5
select * from @result
/* the above part of the code is working fine as it should */
/* the next part of the logic is not working and it is excluding all the Segment Id when it
should not and should only exclude SegmentId=12688 */
insert into @tablevar
select id from @result where
chachedroute.STDistance((select starting from route where id=@Planningid))<700
and
chachedroute.STDistance((select ending from route where id=@Planningid))<700
intersect
select id from @result
select * from @tablevar
Думаю, проблема в and
logi c во второй части кода, где он вычисляет, находятся ли значения в пределах 700 метров. Этот код был впервые создан с концепцией, что каждый PlanningId
должен иметь только один SegmentID
, поэтому я закодировал его, сопоставляя как начало, так и конец сегментов. Но теперь модификация состоит в том, что один PlanningId
может иметь несколько SegmentID
, в чем, я думаю, и заключается проблема. Любая помощь по изменению кода будет очень признательна. Таблица Route
содержит следующие атрибуты:
- ID (int)
- Начало (Географические точки)
- Концовка (Географические точки)
- Кэшированный маршрут (географическая точка)
- LayerId (int)
- AgencyId (int)
Значение LayerId=1
относится к Construction Segment
и LayerId=4
относится к Construction Planning