ST_Area() 表示纬度和经度

ST_Area() for latitude and longitude

我在 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 理解这个多边形包含 纬度和经度 以正确计算面积?

MariaDB 存储 SRID,并在尝试处理具有混合 SRID 的几何体时发出抱怨,但它实际上并不执行任何空间参考/投影操作。所以世界是平的,不管你用什么SRID。

MySQL 在 MySQL 5.7 之前做了同样的事情,但是从 MySQL 8.0 开始有真正的空间参考支持,至少有点。

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

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

ST_AREA() 的空间参考支持仅从 8.0.13 开始受支持。在此之前,当使用不同于 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 

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

In MariaDB, the SRID value is just an integer associated with the geometry value. All calculations are done assuming Euclidean (planar) geometry.

但是,在 Mysql 8.0.13 中提供了此功能,您可以使用 ST_Area():

计算多边形面积

Incompatible Change: Previously, ST_Area() supported only geometry arguments having a Cartesian spatial reference system (SRS) and produced an error when invoked with geometry arguments that specified a geographic SRS. ST_Area() now supports geometry arguments having a geographic SRS and returns the geodetic area in square meters.

因此,如果您将数据库更改为 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));