2016-09-06 24 views
1

我正在將geoFences轉換成Sql地理實例。目前的問題是針對某些情況。地理數字很奇怪和不準確。用Sql地理不正確的數字

第一個(綠色區域)是一個有效的地理圍欄,第二個是在sql中創建的。

This is the valid geofence

This is the Sql geography instance

的座標是: -

朗緯度

51.576004 24.125605, 51.580467 24.122041, 51.585875 24.119730, 51.591239 24.118751, 51.597633 24.120043, 51.603470 24.123843, 51.607161 24.126114, 51.609950 24.126976, 51.616087 24.127133, 51.625915 24.125997, 51.639776 24.119691, 51.576004 24.125605

隨着偏差即100米緩衝液。

的SQL代碼: -

geography::STGeomFromText('POLYGON((51.576004 24.125605, 51.580467 24.122041,51.585875 24.11973,51.591239 24.118751,51.597633 24.120043,51.60347 24.123843,51.607161 24.126114,51.60995 24.126976,51.616087 24.127133,51.625915 24.125997,51.639776 24.119691,51.576004 24.125605))', 4120).MakeValid().STBuffer(100) 

回答

2

多邊形是一個閉環。這意味着你的圍欄應該是一條環繞着道路的環。在這種情況下,你的道路下面一條線,然後重複第一點,即

POLYGON((51.576004 24.125605, ... ,51.576004 24.125605)) 

如果您更改爲一個LINESTRING

geography::STGeomFromText('LINESTRING(51.576004 24.125605, 51.580467 24.122041,51.585875 24.11973,51.591239 24.118751,51.597633 24.120043,51.60347 24.123843,51.607161 24.126114,51.60995 24.126976,51.616087 24.127133,51.625915 24.125997,51.639776 24.119691,51.576004 24.125605)', 4120) 

它看起來像這樣

Linestring

這應該解釋你最終得到的形狀。

要獲得您想要的結果,您可以轉換爲線串,刪除最後一個點,然後應用您的緩衝區。

geography::STGeomFromText('LINESTRING(51.576004 24.125605, 51.580467 24.122041,51.585875 24.11973,51.591239 24.118751,51.597633 24.120043,51.60347 24.123843,51.607161 24.126114,51.60995 24.126976,51.616087 24.127133,51.625915 24.125997,51.639776 24.119691)', 4120).STBuffer(100) 

Buffered Linestring