如果取得西北與東南的兩點座標透過DbGeography這個類別能夠框出地理面積,程式碼如下
1 | DbGeography.FromText(string.Format("POLYGON(({0} {1}, {0} {2}, {3} {2}, {3} {1}, {0} {1}))", |
這樣能取回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 | var point = DbGeography.PointFromText(string.Format("POINT({0} {1})", 經度, 緯度), 4326); |
一樣帶到Intersects就可以得到答案了!! 以上