以下TSQL示例将从Min Max Latitude Longitude创建RECTANGLE
DECLARE @MinLat VARCHAR (10) = N'53.811446';
DECLARE @MaxLat VARCHAR (10) = N'53.809166';
DECLARE @MinLong VARCHAR (10) = N'-1.594991';
DECLARE @MaxLong VARCHAR (10) = N'-1.591515';
DECLARE
@boundingRect VARCHAR (150)
,@geom GEOMETRY;
SET @boundingRect = 'POLYGON((' + @MinLong + ' ' + @MinLat + ', ' +
@MaxLong + ' ' + @MinLat + ', ' +
@MaxLong + ' ' + @MaxLat + ', ' +
@MinLong + ' ' + @MaxLat + ', ' +
@MinLong + ' ' + @MinLat
+ '))';
SET @geom = @boundingRect;
SELECT @geom;
如何从相同的坐标创建CIRCLE?假设坐标之间的直线代表圆的直径。
这可能有帮助吗?我现在无法测试它
SET @boundingCircle = 'CURVEPOLYGON(CIRCULARSTRING('
+ @MaxLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', '
+ @MinLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', '
+ @MaxLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', '
+ '))';
我可能根据@ZoharPeled的评论来解决这个问题
使用STDistance,STCentroid和STBuffer的组合
注意:STCentroid的文档说这是从2012年开始引入的,但它适用于2008r2
使用STCentroid获取多边形的中心点使用STDistance获取半径使用STBuffer生成圆的多边形(具有多个点)
所以,继续问题中的代码示例获取中心点
DECLARE @g geometry;
SET @g = geometry::STGeomFromText(@boundingRect, 0);
SELECT @g.STCentroid().ToString();
给你
POINT (-1.5932529999990948 53.8103059999994)
获得半径
DECLARE @h geometry;
SET @g = geometry::STGeomFromText('POINT (-1.594991 53.811446)', 0); --one end of the radius
SET @h = geometry::STGeomFromText('POINT (-1.5932529999990948 53.8103059999994)', 0); --from STCentroid
SELECT @g.STDistance(@h); --0.00207851966661527
给你
0.00207851966661527
创建多边形圆
DECLARE @poly NVARCHAR(MAX)
SET @g = geometry::STGeomFromText('POINT (-1.5932529999990948 53.8103059999994)', 0);
SELECT @poly = @g.STBuffer(0.00207851966661527).ToString(); --from STDistance()
SET @h = geometry::STGeomFromText(@poly, 0);
SELECT @h
给你
现在,有没有一种不太复杂的方法来做到这一点?