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));
我在 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));