【问题标题】:ST_Area() for latitude and longitudeST_Area() 用于纬度和经度
【发布时间】:2019-07-19 22:16:38
【问题描述】:

我在 MariaDB 中有一个包含多个坐标的多边形:

POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))

我想用 MariaDB 计算这个多边形的面积,如下所示:

SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))'))

上述查询的结果是15.546039738650009,这是错误。我用this 工具计算了多边形的面积,它给了我119116192747.1

我应该怎么做才能让 mariaDB 了解这个多边形包含纬度和经度以正确计算面积?

【问题讨论】:

  • 您是否尝试设置 SRID? dbfiddle.uk/…
  • @PaulSpiegel 是的,但我不知道如何在 MariaDB 中执行此操作。见:dbfiddle.uk/…
  • 恐怕 MariaDB 远远落后于 MySQL。我什至不知道如何以米为单位。
  • 单位一样吗?

标签: mysql geometry mariadb coordinates spatial-query


【解决方案1】:

根据 MariaDB 文档,它不提供此功能:

在 MariaDB 中,SRID 值只是与几何值关联的整数。所有计算均假设欧几里得(平面)几何。

但是,在 Mysql 8.0.13 中,提供了此功能,您可以使用 ST_Area() 计算多边形面积:

不兼容的更改:以前,ST_Area() 仅支持具有笛卡尔空间参考系统 (SRS) 的几何参数,并且在使用指定地理 SRS 的几何参数调用时会产生错误。 ST_Area() 现在支持具有地理 SRS 的几何参数并返回以平方米为单位的大地面积。

因此,如果您将数据库更改为 MYSQL > 8.0.13,您可以使用以下查询计算多边形面积:

SELECT ST_Area(ST_PolyFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));

【讨论】:

    【解决方案2】:

    MariaDB 存储 SRID,并在尝试处理具有混合 SRID 的几何图形时报错,但它实际上并没有执行任何空间参考/投影操作。因此,无论您使用什么 SRID,世界都是平的。

    在 MySQL 5.7 之前,MySQL 做了同样的事情,但从 MySQL 8.0 开始,至少在某种程度上支持真正的空间参考。

    例如它现在正确地将两个纬度之间的距离正确地返回为~111km,而不仅仅是“1”:

    > SELECT st_distance(st_geomfromtext('POINT(50.0 10)', 4326), st_geomfromtext('POINT(51.0 10)', 4326)):
            111239.69315297529
    

    仅从 8.0.13 开始支持 ST_AREA() 的空间参考支持。在此之前,您将在使用不同于 0(笛卡尔平面)的 SRID 时得到:

    > SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));
    ERROR 3618 (22S00): st_area(POLYGON) has not been implemented for geographic spatial reference systems.
    

    使用 MySQL >= 8.0.13 你会得到预期的结果:

    > SELECT ST_Area(ST_GeomFromText('POLYGON((50.4668 -6.90665,51.73607 0.14657,55.3032 -4.52724,50.4668 -6.90665))', 4326));
        119085646585.42969 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-09
      • 2013-02-21
      • 1970-01-01
      • 2019-03-25
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多