到目前为止,我已经过滤了我的结果,看看它们是否属于缓冲的线串。现在我想计算从线路开始到第3和第4列中列出的每个纬度和经度的线段的长度。
我想要的距离如下图所示:
declare @TripRecordsReportWaypoints table(Column1 int, column3 decimal(25,10), Column4 decimal(25,10), InRouteBuffer bit);
insert into @TripRecordsReportWaypoints values (210,40.1445,-82.9911,1),(211,40.1444,-82.991 ,1),(212,40.1442,-82.9909,1),(213,40.1441,-82.9907,1),(214,40.144 ,-82.9906,1);
declare @Columbus106from71to23 geography;
set @Columbus106from71to23 = Geography ::STLineFromText('LINESTRING(-82.969404 40.142222,-82.972580 40.141951,-82.976319 40.141602, -82.979534 40.141376,-82.981217 40.141339,-82.983593 40.141409)',4326);
declare @Routebuffer geography;
set @Routebuffer = @Columbus106from71to23.STBuffer('20');
select Column1
,Column3
,Column4
,@Routebuffer.STContains(geography::Point(Column3,Column4,4326)) as InRouteBuffer
from @TripRecordsReportWaypoints
where @Routebuffer.STContains(geography::Point(Column3,Column4,4326)) = 1;
我需要做些什么来计算线段从我定义的线串的开头到每个Lat,Long的距离。我想要一个MatchAlongRoute列。
答案 0 :(得分:0)
我不完全确定你的数据和要求是怎么回事,因为你问题中的数据确实没有意义,但是.......
要查找两个geography
点之间的距离,您可以使用GeogPoint.STDistance(OtherGeogPoint)
函数,该函数将返回以米为单位的距离。
要查找geography
linestring
的开头,您可以使用GeogLineString.STStartPoint()
或GeogLineString.STPointN(PointNumberYouWantToReturn)
,其号码为1
,但功能相同,但{如果您想稍后更改积分,{1}}会给您更多的灵活性。
放在一起,看起来如下:
STPointN
根据您的评论,以下是另一项可以帮助您到达目的地的功能:
select Column1
,Column3
,Column4
,geography::Point(Column3,Column4,4326).STDistance(@Routebuffer.STPointN(1)) as StartPointToPointMetres
from @TripRecordsReportWaypoints;
会找到一个.ShortestLineTo()
类型与另一个类型之间的最短线,在您的情况下如下所示:
geography