Sql 地理数据不准确

Inaccurate figure with Sql geography

我正在将 geoFences 转换成 Sql 地理 instance.The 目前的问题是某些 instance.The 地理图很奇怪而且不准确。

第一个(绿色区域)是有效的地理围栏,第二个是在 sql 中创建的。

坐标是:-

经纬度

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) 

多边形是一个闭环。这意味着您的栅栏应该是围绕道路的一圈。在这种情况下,您有一条沿着道路的线,然后重复第一个点,即

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)

看起来像这样

这应该可以解释你最终得到的形状。

要获得您想要的结果,您可以转换为线串,删除最后一个点,然后应用您的缓冲区。

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)