【问题标题】:SQL Server CircleSQL Server 圈子
【发布时间】:2016-05-13 06:56:10
【问题描述】:

我正在尝试根据中点和半径在 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

【问题讨论】:

  • 我在 2012 年运行了你的两个代码 sn-ps,它产生了圈子。您的全局临时表可能有一些时髦的东西。我会切换到本地/会话特定的临时表,看看您的问题是否仍然存在。

标签: sql sql-server-2008 spatial


【解决方案1】:

您的问题是您在地理坐标中画了一个圆圈。谷歌地图正在使用网络墨卡托投影https://en.wikipedia.org/wiki/Web_Mercator,因此您的圆圈将是一个椭圆形。如果您想在 Google 地图中制作看起来像圆形的东西,您必须在使用网络墨卡托投影的数据集中制作它。 (我故意说“看起来像一个圆圈”,因为如果你将它投影到另一个系统,例如大比例尺地图的 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 Server 空间工具 (https://gis.stackexchange.com/questions/2723/is-it-possible-to-reproject-spatial-data-using-sql-server) 或外部工具来进行重投影。如果您只有几个点,http://cs2cs.mygeodata.eu/ 可能会有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多