A MULTILINESTRING
is a collection of LineStrings. MultiLineStrings are useful for gathering a group of LineStrings into one geometry. For example, you may want to gather the LineStrings denoting all of the roads in a particular municipality.
You can also store a MULTILINESTRING
with the following additional dimensions:
- A third dimension coordinate
Z
(MULTILINESTRINGZ
). - A measure coordinate
M
(MULTILINESTRINGM
). - Both a third dimension and a measure coordinate (
MULTILINESTRINGZM
).
The Z
and M
dimensions can be accessed or modified using a number of built-in functions, including:
ST_Z
ST_M
ST_Affine
ST_Zmflag
ST_MakePoint
ST_MakePointM
ST_Force3D
ST_Force3DZ
ST_Force3DM
ST_Force4D
ST_Snap
ST_SnapToGrid
ST_RotateZ
ST_AddMeasure
Note that CockroachDB's spatial indexing is still based on the 2D coordinate system. This means that:
- The Z/M dimension is not index accelerated when using spatial predicates.
- Some spatial functions ignore the Z/M dimension, with transformations discarding the Z/M value.
Examples
Well known text
A MultiLineString can be created from SQL by calling the st_geomfromtext
function on a MultiLineString definition expressed in the Well Known Text (WKT) format.
SELECT ST_GeomFromText('MULTILINESTRING((0 0, 1440 900), (800 600, 200 400))');
st_geomfromtext
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0105000000020000000102000000020000000000000000000000000000000000000000000000008096400000000000208C4001020000000200000000000000000089400000000000C0824000000000000069400000000000007940
(1 row)
SQL
A MultiLineString can be created from SQL by calling an aggregate function such as ST_Collect
or ST_Union
on a column that contains LineString geometries. In the example below, we will build a MultiLineString from several LineStrings.
First, insert the LineStrings:
CREATE TABLE tmp_linestrings (id INT8 default unique_rowid(), geom GEOMETRY);
INSERT INTO tmp_linestrings (geom)
VALUES
(st_geomfromtext('SRID=4326;LINESTRING(-88.243385 40.116421, -87.906471 43.038902, -95.992775 36.153980)')),
(st_geomfromtext('SRID=4326;LINESTRING(-75.704722 36.076944, -95.992775 36.153980, -87.906471 43.038902)')),
(st_geomfromtext('SRID=4326;LINESTRING(-76.8261 42.1727, -75.6608 41.4102,-73.5422 41.052, -73.929 41.707, -76.8261 42.1727)'));
Next, build a MultiLineString from the individual LineStrings using ST_Collect
, and check the output with ST_GeometryType
to verify that it is indeed a MultiLineString:
SELECT ST_GeometryType(st_collect(geom)) AS output FROM tmp_linestrings;
output
----------------------
ST_MultiLineString
(1 row)
Finally, drop the temporary table:
DROP TABLE tmp_linestrings;