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