SQL Server圈 [英] SQL Server Circle

查看:20
本文介绍了SQL Server圈的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

推荐答案

您的问题是在地理坐标中绘制一个圆。谷歌地图正在使用网络墨卡托投影https://en.wikipedia.org/wiki/Web_Mercator,所以你的圆圈将是一个椭圆形。如果你想在谷歌地图上做出看起来像圆的东西,你必须用网络墨卡托投影在数据集中做出它。(我故意说"看起来像一个圆",因为如果您将它投影到另一个系统,例如,对于大比例尺地图,它可能最终会再次变成椭圆形。)

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)或外部工具来进行重投影。如果您只有几个要点,http://cs2cs.mygeodata.eu/可能会很有用。

这篇关于SQL Server圈的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆