我使用带有Spatialite扩展名的sqlite来查询一个数据包文件。
考虑以下测试表,其中每行的几何类型为LineString或MultiLineString。
sqlite>load_extension('mod_spatialite');
sqlite>select EnableGpkgMode(); -- I'm testing on GeoPackage
sqlite>SELECT id,geom FROM mix AS ft;
1|LINESTRING(10 0,10 60)
2|MULTILINESTRING( (40 0,40 60), (50 0,50 60) )
字符串
我需要一个结果,其中每个MultiLineString被“分解”成许多LineString,如下所示:
1|1|LINESTRING(10 0,10 60)
2|2.1|LINESTRING( 40 0,40 60 )
2|2.2|LINESTRING( 50 0,50 60 )
型
如果可能的话,我希望两者都保留原来的id
,并创建一个新的newid
,如上所示。
下面的解决方案在PostGIS中工作,但我仍然没有找到Spatialite的解决方案。
postgis=> SELECT
id,
array_to_string(
id || (ST_Dump(geom)).path,
'.'
) AS newid,
ST_AsText((ST_Dump(geom)).geom) AS geom
FROM cubetown.MixLS_1
;
id | newid | geom
----+-------+------------------------
1 | 1 | LINESTRING(10 0,10 60)
2 | 2.1 | LINESTRING(40 0,40 60)
2 | 2.2 | LINESTRING(50 0,50 60)
型
1条答案
按热度按时间9cbw7uwe1#
SQLite本质上不支持ST_Dump等集合返回函数。您需要使用一种解决方法,通常是通过递归CTE。下面的SQLite/Spatialite SQL语句应该可以做到这一点:
字符串
简短说明: