2017-06-01 67 views
1

到目前爲止,我已經篩選了我的結果以查看它們是否屬於緩衝行字符串。現在我想計算線段沿路線的長度,從路線的開頭到列3和列4中列出的每個經度和緯度。計算從預定義的行字符串開始的行字符串的長度,該字符串從該行字符串開始到該行字符串的緩衝區域內的點

我想要的距離在下面的照片中顯示:

Distance explanation

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; 

什麼我需要做的,從我的定義線串的開始給每個緯度,經度計算線段的距離。我想要一個名爲DistanceAlongRoute的列。

回答

0

我不能完全確定是怎麼回事既您的數據和要求,在你的問題中的數據並沒有真正意義,但是....

找到兩個geography點之間的距離您可以使用GeogPoint.STDistance(OtherGeogPoint)函數,該函數將返回以米爲單位的距離。

要找到geographylinestring的開始,你可以使用GeogLineString.STStartPoint()GeogLineString.STPointN(PointNumberYouWantToReturn)編號爲1,在功能上等同,但STPointN確實應該要改變以後你的觀點給你多一點靈活性。

放在一起,這一下類似如下:

select Column1 
     ,Column3 
     ,Column4 
     ,geography::Point(Column3,Column4,4326).STDistance(@Routebuffer.STPointN(1)) as StartPointToPointMetres 
from @TripRecordsReportWaypoints; 

從下面您的意見之後,這裏是另一種功能,可以幫助你得到你需要去:

.ShortestLineTo()會發現一個geography類型和另一個類型之間的最短線,在你的情況下,它看起來像這樣:

@Columbus106from71to23.ShortestLineTo(geography::Point(Column3,Column4,4326)).STStartPoint() as LineFromRouteToPoint 
+0

戴夫,我想知道特定點的路線有多遠。有一個簡單的方法來計算這個?我不想要一個海峽線路距離,我想要從行字符串的開頭開始,沿着該行到我的數據集中的點。這是否更有意義? – Jon

+0

在這種情況下,您可能需要調整問題中的數據/查詢,因爲數據中的任何一點實際上都不在問題的緩衝區中。其次,你的意思是*沿路線*有多遠?如果該點位於緩衝區內,您是否希望沿着'linestring'行進,直到直接位於該點的北部或南部,然後直線到達該位置,或者從該行的最近部分採用最短路線? – iamdave

+0

如果這個點在緩衝區內,我想沿着線串行進,直到到達距離最近線路最短路線的點。所以從行字符串的開始到行字符串的距離,直到位於行字符串中距離列3和行4中給出的點最近的點。 – Jon

相關問題