从Min Max Lat纬度经度创建圆

问题描述 投票:0回答:2

以下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;

enter image description here

如何从相同的坐标创建CIRCLE?假设坐标之间的直线代表圆的直径。

sql-server sql-server-2008-r2 gis geospatial
2个回答
0
投票

这可能有帮助吗?我现在无法测试它

SET @boundingCircle = 'CURVEPOLYGON(CIRCULARSTRING(' 
                     + @MaxLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', ' 
                     + @MinLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', ' 
                     + @MaxLong + ' ' + (@MinLat+(@MaxLat-@MinLat)/2) + ', ' 
                     + '))';

0
投票

我可能根据@ZoharPeled的评论来解决这个问题

使用STDistanceSTCentroidSTBuffer的组合

注意: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

给你

enter image description here

现在,有没有一种不太复杂的方法来做到这一点?

© www.soinside.com 2019 - 2024. All rights reserved.