0%

【地理位置】透過座標框出地理位置,與判斷地理位置是否重疊

如果取得西北東南的兩點座標透過DbGeography這個類別能夠框出地理面積,程式碼如下

1
2
3
4
5
6
DbGeography.FromText(string.Format("POLYGON(({0} {1}, {0} {2}, {3} {2}, {3} {1}, {0} {1}))",
西北座標點的經度,
西北座標點的緯度,
東南座標點的緯度,
東南座標點的經度), 4326);

這樣能取回DbGeography的地理面積的類別,透過這個類別的Intersects這個Method能判斷兩個面積,或是座標點是否有交集。參考MSDN

範例 : 用Google地圖來取得兩個座標點,框出地理位置
**
**座標點1 : 25.029768, 121.546829

[![](https://1.bp.blogspot.com/-2gYLmcT7YnE/V6Lj8q2dPzI/AAAAAAAAH1I/paibCBIx16cafBaBrvhNCJkrFTcVrYS0gCLcB/s400/1.png)](https://1.bp.blogspot.com/-2gYLmcT7YnE/V6Lj8q2dPzI/AAAAAAAAH1I/paibCBIx16cafBaBrvhNCJkrFTcVrYS0gCLcB/s1600/1.png)

座標點2 : 25.028854, 121.548417

[![](https://2.bp.blogspot.com/-U3tLa6GFY3U/V6LkMN-HODI/AAAAAAAAH1M/9FhZt1GbnlQPi29X-gO8YKwhuiZbLUBvACLcB/s400/1.png)](https://2.bp.blogspot.com/-U3tLa6GFY3U/V6LkMN-HODI/AAAAAAAAH1M/9FhZt1GbnlQPi29X-gO8YKwhuiZbLUBvACLcB/s1600/1.png)

所以透過剛剛的程式我們可以框出這塊地理面積

[![](https://2.bp.blogspot.com/-vt2mdO_TXx0/V6LlFRP_RrI/AAAAAAAAH1U/iyilo98OOwsCNtTPvlcvN9Hs-LAiD0uAwCLcB/s320/1.png)](https://2.bp.blogspot.com/-vt2mdO_TXx0/V6LlFRP_RrI/AAAAAAAAH1U/iyilo98OOwsCNtTPvlcvN9Hs-LAiD0uAwCLcB/s1600/1.png)

依樣畫葫蘆,在選兩個點去框出下個面積
座標點1 : 25.029541, 121.547474
**座標點2 : **25.028199, 121.549636

[![](https://1.bp.blogspot.com/-uv7-0y_8x2I/V6LlwFgayyI/AAAAAAAAH1k/4lmNDDpGBmMhF0xtmFJjIuAtlQKfqw_mwCLcB/s320/1.png)](https://1.bp.blogspot.com/-uv7-0y_8x2I/V6LlwFgayyI/AAAAAAAAH1k/4lmNDDpGBmMhF0xtmFJjIuAtlQKfqw_mwCLcB/s1600/1.png)

從兩張圖可以看到在四維路那邊有重疊的部分,用程式碼來跑跑看

[![](https://1.bp.blogspot.com/-1wdcHZ4VBEU/V6LmrE_EI7I/AAAAAAAAH1s/4_wwJ8SwkEw-neIcwpAeeaoTfrcJ544JgCLcB/s640/1.png)](https://1.bp.blogspot.com/-1wdcHZ4VBEU/V6LmrE_EI7I/AAAAAAAAH1s/4_wwJ8SwkEw-neIcwpAeeaoTfrcJ544JgCLcB/s1600/1.png)

為了驗證不重疊會回傳False,我們將Area2的西北座標往右下角移動,讓面積縮小不會跟Area1重疊,再次實驗看看
Area2 
座標點1 : 25.029541, 121.547474 >> 25.029123, 121.548772  (改到敦化南路二段上)
**座標點2 : **25.028199, 121.549636

[![](https://4.bp.blogspot.com/-EYzYtuHuPs0/V6Lnj8MSgYI/AAAAAAAAH14/cDU5K1uKDQUlQbYYNdFEt_h_sJySf0ZmACLcB/s1600/1.png)](https://4.bp.blogspot.com/-EYzYtuHuPs0/V6Lnj8MSgYI/AAAAAAAAH14/cDU5K1uKDQUlQbYYNdFEt_h_sJySf0ZmACLcB/s1600/1.png)

補充:
上面介紹的是兩點框出面積,如果要判斷一個座標點有無落在一個面積裡面,用法也相同,只是建立DbGeography座標點的方法略有不同,如下

1
2
var point = DbGeography.PointFromText(string.Format("POINT({0} {1})", 經度, 緯度), 4326);

一樣帶到Intersects就可以得到答案了!! 以上