Mariadb
如何通過在 MariaDB 中聚合點 (ST_MakeLine) 來構造 LINESTRING?
假設我有一張有 3 個點的表格,
CREATE TABLE foo ( id int PRIMARY KEY, geog point ); INSERT INTO foo (id, geog) VALUES ( 1, Point(0,0) ), ( 2, Point(1,1) ), ( 3, Point(2,2) );
我如何
LINESTRING
在這三個不同的行中用這三個點建構一個。由此產生的 WKT 應該是LINESTRING( 0 0, 1 1, 2 2 )
?PostGIS 使用名為
ST_MakeLine
SELECT ST_MakeLine(geog) FROM foo ORDER BY id;
由於 MariaDB(和 MySQL)缺乏所有空間聚合,目前唯一的方法是創建 WKT,並強制 MySQL 解析該 WKT。
SELECT ST_AsText( ST_GeomFromText(CONCAT( 'LINESTRING (', GROUP_CONCAT(CONCAT(ST_X(geog),' ',ST_Y(geog)) SEPARATOR ','), ')' )) ) FROM foo ORDER BY id; -- returns LINESTRING (0 0,1 1,2 2)
內側部分
GROUP_CONCAT(CONCAT(ST_X(geog),' ',ST_Y(geog)) SEPARATOR ',')
創建點列表,然後我們將其包裝
LINESTRING ( $pointlist )
並提供給ST_GeomFromText()