如圖所示:如何根據提供的道路的shape file獲得該路的high cross和low cross
所謂的high cross就是圖中的king st這條路,low cross是Gravers Ln這條路。
具體實現的方法如下:
#1 將道路的shape數據導入到 Sql Server中
#2 在實體表中增加兩個字段low_cross和high_cross
#3 用程序【我是用C#寫的一個小程序】循環每條街道,找出跟當前街道相交的路,獲得當前道路起始點地址的經緯度和一個交叉路口的經緯度,比較起始點位置與交叉路口的遠近,離數字較小的近就是low cross,離數字小的較遠的就是high cross。
#4 當然處理的過程中有多種情況:有隻有一個交叉點的情況 -- 只能更新一個high cross 或者low cross
兩個交叉路都在同一個方向的 -- 這就需要用Intersections的方法獲得交叉點比較,然後用STEquals的方法比較這兩個點是否爲同一個點【實際操作過程中發現,有時候兩個點的經緯度差別很小,如果用STEquals判斷是兩個點,實際邏輯上應該是一個點,STDistance比較一個容差的距離的方式比較合適的,經過測試我設置的值爲0.00002,這個值可根據實際情況設置】
三個交叉路口、四個交叉路口、五個交叉路口的都有 -- 處理方法是一樣,當前無法區分那個確實是high cross 和low cross,所以這種情況就是high cross或low cross可能有多個的情況。