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/ 可能会有用。
我正在尝试根据中点和半径在 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/ 可能会有用。