SQL Server Circle

时间:2016-02-03 21:15:36

标签: sql sql-server-2008 spatial

我正在尝试基于中点和半径在SQL Server中创建一个圆圈。

这似乎是一个解决方案,但它创建一个椭圆形或椭圆形与圆形。还有另一种创建圆圈的方法吗?

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-88.0 44.5)', 4326);
select @g.BufferWithTolerance(5, .01, 1)

我目前正在使用SQL Server 2008.

此代码也演示了此问题。空间结果看起来像一个圆圈,但是当我在谷歌地图上绘制圆圈时,它是椭圆形的。此外,当我使用STContains查看圆圈中的哪些点时,它肯定会遵循椭圆形轮廓。

IF EXISTS (SELECT * FROM [tempdb].[sys].[objects] WHERE [name] = N'##circle')
    DROP TABLE ##circle;

CREATE TABLE ##circle
(
    [Polygon] [geometry] NOT NULL
)

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-88.0 44.5)', 4326);

insert into ##circle (Polygon) 
values (@g.BufferWithTolerance(.5,.01,1))

select Polygon from ##circle

1 个答案:

答案 0 :(得分:2)

您的问题是您在地理坐标中绘制一个圆圈。 Google地图正在使用网络墨卡投影https://en.wikipedia.org/wiki/Web_Mercator,因此您的圆圈将成为椭圆形。如果您想在Google地图中制作看似圆圈的内容,则必须使用网络墨卡托投影在数据集中创建。 (我故意说“看起来像一个圆圈”,因为如果你把它投射到另一个系统,例如,对于一个大比例的地图,它可能会再次变成椭圆形。)

web_mercator的epsg代码是3857,所以如果你将你的x和y坐标投影到web_mercator

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('POINT(-9796115.18981 5543147.20386)', 3857);
SELECT @g.BufferWithTolerance(5, .01, 1)

应该可以工作(只需输入-9796 ... 5543 ......你的地理X和Y的web_mercator坐标是否正确)

您似乎需要使用SQL Server空间工具(https://gis.stackexchange.com/questions/2723/is-it-possible-to-reproject-spatial-data-using-sql-server)或外部工具来进行重新投影。如果您只有几个积分,http://cs2cs.mygeodata.eu/可能会有用。