2016-09-06 25 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