ST_Area()用于表示纬度和经度

时间:2019-02-26 11:19:53

标签: mysql geometry mariadb coordinates spatial-query

我有一个包含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了解此多边形包含经度和经度,以便正确计算面积?

2 个答案:

答案 0 :(得分:1)

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()的空间参考支持。在此之前,您将使用SRID不同于0(笛卡尔平面)的情况:

> 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 

答案 1 :(得分: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));