SQL 服务器圈

SQL Server Circle

我正在尝试根据中点和半径在 SQL 服务器中创建一个圆。

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

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

我目前正在使用 SQL Server 2008。

这段代码也说明了这个问题。空间结果看起来像一个圆,但当我在 google 地图上绘制圆时,它是椭圆形的。还有,当我用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

你的问题是你在地理坐标中画了一个圆。 Google 地图正在使用网络墨卡托投影 https://en.wikipedia.org/wiki/Web_Mercator,因此您的圆圈将变成椭​​圆形。如果你想在 Google 地图中制作看起来像圆圈的东西,你必须在具有 web 墨卡托投影的数据集中制作它。 (我故意说 "looks like a circle" 因为如果你将它投影到另一个系统,例如 utm 用于大比例尺地图,它可能会再次变成椭圆形。)

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 服务器空间工具(https://gis.stackexchange.com/questions/2723/is-it-possible-to-reproject-spatial-data-using-sql-server) or an external tool to do the reprojection. If you have just a few Points, http://cs2cs.mygeodata.eu/ 可能会有用。