【问题标题】:Wrong area in STArea() in SQL ServerSQL Server 中 STArea() 中的错误区域
【发布时间】:2020-07-02 17:56:09
【问题描述】:

我正在尝试计算另存为 WKT 的几何图形的表面 (STArea ()),但我得到了错误的值。

我提到使用地理没有帮助。我还注意到,当我设置 use_spheroid=false 时,Postgis 区域的计数正确。

DECLARE @g geometry = geometry::STGeomFromText('POLYGON((21.5601775022348 52.1813862660549,21.5601461469143 52.1813295549141,21.559853091877 52.1813993365177,21.5597665803865 52.1812613330339,21.5593037698201 52.1813692515792,21.5592677194965 52.1813021172669,21.5592607711581 52.1813034375092,21.5592188506351 52.1812334620465,21.5591248909245 52.1812561912586,21.5590395906618 52.1811137531269,21.5587491625113 52.1811808662478,21.5589985172752 52.1816470941761,21.5595646783963 52.1815219107667,21.5601775022348 52.1813862660549))', 4326);  
select @g;
select @g.STArea()

【问题讨论】:

  • 什么是“正确”的区域以及使用什么测量单位?多边形顶点的度量单位是平方吗?为什么要对 Geometry 使用非零 SRID?
  • 从 PostGIS 查询 SELECT St_Area( ST_GeomFromText('POLYGON((21.5601775022348 52.1813862660549,21.5601461469143 52.1813295549141,21.559853091877 52.1813993365177,21.5597665803865 52.1812613330339,21.5593037698201 52.1813692515792,21.5592677194965 52.1813021172669,21.5592607711581 52.1813034375092,21.5592188506351 52.1812334620465,21.5591248909245 52.1812561912586,21.5590395906618 52.1811137531269,21.5587491625113 52.1811808662478,21.5589985172752 52.1816470941761,21.5595646783963 52.1815219107667,21.5601775022348 52.1813862660549))', 4326), false); 得到的正确区域是 2286.22
  • 平方米。我是 SQL Server 新手,所以我像在 PostGIS 中一样使用 4326 SRID。

标签: sql-server spatial wkt


【解决方案1】:

在地理学中,当您遍历多边形时,左侧是内部。所以你已经指定了你想要的多边形的倒数。几何形状无关紧要,因为内部始终是有界区域。

试试

DECLARE @g geography = geography::STGeomFromText('POLYGON((21.5601775022348 52.1813862660549,21.5601461469143 52.1813295549141,21.559853091877 52.1813993365177,21.5597665803865 52.1812613330339,21.5593037698201 52.1813692515792,21.5592677194965 52.1813021172669,21.5592607711581 52.1813034375092,21.5592188506351 52.1812334620465,21.5591248909245 52.1812561912586,21.5590395906618 52.1811137531269,21.5587491625113 52.1811808662478,21.5589985172752 52.1816470941761,21.5595646783963 52.1815219107667,21.5601775022348 52.1813862660549))', 4326);  
set @g =  @g.ReorientObject()
select @g, @g.STArea()

输出

2381.30781687796

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多