M-Значения в PostGIS

#postgresql #postgis

Вопрос:

Интересно, как создавать полилинейные геометрии в Postgis.

 CREATE TABLE tabm (oid integer primary key);

SELECT AddGeometryColumn ('public','tabm','geom',25832,'MULTILINESTRING',3);

insert into tabm(oid,geom) values(
   1,
   ST_GeomFromText('MULTILINESTRINGM ((572929 5831262 300, 572929 5831562 400))')
);
 

Приведенный выше код приводит к

 ERROR: FEHLER:  Column has Z dimension but geometry does not
SQL state: 22023
 

(PosgreSQL 13.3)

Ответ №1:

geom Столбец не относится к типу MULTILINESTRINGM . Измените столбец, и вы сможете выполнять вставки:

 SELECT AddGeometryColumn ('public','tabm','geom',25832,'MULTILINESTRINGM',3);
 

ДЕМОНСТРАЦИЯ: db<>fiddle

 CREATE TABLE tabm (oid integer primary key);
SELECT AddGeometryColumn ('public','tabm','geom',25832,'MULTILINESTRINGM',3);
INSERT INTO tabm(oid,geom) VALUES 
(1,'SRID=25832;MULTILINESTRINGM ((572929 5831262 300, 572929 5831562 400))'::geometry); 

SELECT ST_AsText(i.geom),ST_M(i.geom) FROM tabm,
LATERAL ST_DumpPoints(geom) i(j);

st_astext                      st_m
-----------------------------------
POINT M (572929 5831262 300)    300
POINT M (572929 5831562 400)    400
    
 

Комментарии:

1. Спасибо! Идеальный ответ.