从 Geometry.STEnvelope() 展开点
Expand the points from Geometry.STEnvelope()
我有一个简单的几何多边形形状。我可以使用 STEnvelope() 获取边界框。我想按比例扩大点,基本上缩小类似于截图。
mssql 服务器有能力做到这一点吗?
DECLARE @g GEOMETRY;
SET @g = GEOMETRY::STPolyFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SELECT @g.STEnvelope()
更新:
我创建了一个演示 sql 命令来缩放多边形。而不是将新多边形居中放置在右上角。
DECLARE @zoom DECIMAL(22,22);
SET @zoom = 0.00001;
DECLARE @g GEOMETRY;
SET @g = geometry::STGeomFromText('POLYGON ((-12934935.9561 5405312.0569999963, -12934925.8363 5405305.5031, -12934930.8382 5405297.7252999991, -12934940.957899999 5405304.2792000026, -12934935.9561 5405312.0569999963))', 3857)
SELECT @g.STPointN(1)
UNION ALL
SELECT @g.STPointN(2)
UNION ALL
SELECT @g.STPointN(3)
UNION ALL
SELECT @g.STPointN(4)
UNION ALL
SELECT Geometry::Point(@g.STPointN(1).STX + (@g.STPointN(1).STX * ( CASE WHEN @g.STPointN(1).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(1).STY + (@g.STPointN(1).STY * ( CASE WHEN @g.STPointN(1).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(2).STX + (@g.STPointN(2).STX * ( CASE WHEN @g.STPointN(2).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(2).STY + (@g.STPointN(2).STY * ( CASE WHEN @g.STPointN(2).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(3).STX + (@g.STPointN(3).STX * ( CASE WHEN @g.STPointN(3).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(3).STY + (@g.STPointN(3).STY * ( CASE WHEN @g.STPointN(3).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(4).STX + (@g.STPointN(4).STX * ( CASE WHEN @g.STPointN(4).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(4).STY + (@g.STPointN(4).STY * ( CASE WHEN @g.STPointN(4).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
我做错了什么?
我最终放弃了 ms sql 版本并使用 C# 版本的 Clipper http://www.angusj.com/delphi/clipper.php。
我有一个简单的几何多边形形状。我可以使用 STEnvelope() 获取边界框。我想按比例扩大点,基本上缩小类似于截图。
mssql 服务器有能力做到这一点吗?
DECLARE @g GEOMETRY;
SET @g = GEOMETRY::STPolyFromText('POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326);
SELECT @g.STEnvelope()
更新: 我创建了一个演示 sql 命令来缩放多边形。而不是将新多边形居中放置在右上角。
DECLARE @zoom DECIMAL(22,22);
SET @zoom = 0.00001;
DECLARE @g GEOMETRY;
SET @g = geometry::STGeomFromText('POLYGON ((-12934935.9561 5405312.0569999963, -12934925.8363 5405305.5031, -12934930.8382 5405297.7252999991, -12934940.957899999 5405304.2792000026, -12934935.9561 5405312.0569999963))', 3857)
SELECT @g.STPointN(1)
UNION ALL
SELECT @g.STPointN(2)
UNION ALL
SELECT @g.STPointN(3)
UNION ALL
SELECT @g.STPointN(4)
UNION ALL
SELECT Geometry::Point(@g.STPointN(1).STX + (@g.STPointN(1).STX * ( CASE WHEN @g.STPointN(1).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(1).STY + (@g.STPointN(1).STY * ( CASE WHEN @g.STPointN(1).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(2).STX + (@g.STPointN(2).STX * ( CASE WHEN @g.STPointN(2).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(2).STY + (@g.STPointN(2).STY * ( CASE WHEN @g.STPointN(2).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(3).STX + (@g.STPointN(3).STX * ( CASE WHEN @g.STPointN(3).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(3).STY + (@g.STPointN(3).STY * ( CASE WHEN @g.STPointN(3).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
UNION ALL
SELECT Geometry::Point(@g.STPointN(4).STX + (@g.STPointN(4).STX * ( CASE WHEN @g.STPointN(4).STX > 0 THEN @zoom ELSE -@zoom END )), @g.STPointN(4).STY + (@g.STPointN(4).STY * ( CASE WHEN @g.STPointN(4).STY > 0 THEN @zoom ELSE -@zoom END )), 3857)
我做错了什么?
我最终放弃了 ms sql 版本并使用 C# 版本的 Clipper http://www.angusj.com/delphi/clipper.php。