Dit onderdeel beschrijft hoe je in PostGIS een ruimtelijke tabel met puntgeometrieën aanmaakt, die hier rx_puntjes
wordt genoemd.
Tabel rx_puntjes
heeft de volgende kolommen:
gid
uniek oplopende nummer van het object dat door het systeem wordt toegekend (datatypeserial
).geom
de geometrie van het object.label
een tekstlabel.code
een code (datatype tekst).state
een statusveld met een integerwaarde.date
een datumveld met tijd en tijdzone.
In de PostGIS 1.x wordt in een constraint met PostGIS-functie geometrytype(geom)
aangegeven dat de kolom geom
alleen punt-geometrieën mag bevatten (of leeg mag zijn) en met PostGIS-functie st_srid(geom)
dat de punt-geometrieën in deze kolom uitgedrukt worden in coördinaten van het RD-kaartstelsel (SRID ‘28992’). Constraints bepalen ook dat het kolom gid
de primaire sleutel van de tabel vormt en dat de punt-geometrieën tweedimensionaal zijn (alleen x en y, geen z). Ten slotte wordt er aan de tabel één record met een puntgeometrie ingevoegd. Met de functie ST_Point
worden eerst de coördinaten aan het punt toegekend en vervolgens wordt met de functie ST_SetSRID
het RD-stelsel aan de coördinaten gekoppeld. Zie SQL-statement voor PostGIS 1.5.
Voor PostGIS 2.x kan de tabel iets eenvoudiger aangemaakt worden en zijn er geen contraints nodig. Bij de declaratie van de kolommen kan al worden aangegeven dat gid
de primaire sleutel vormt en dat de geometrie van het type POINT is met de coördinaten van het RD-stelsel. Zie de SQL-statement voor PostGIS 2.1.
Op een vergelijkbare manier kun je een tabel met vlak-geometrieën aanmaken. Zie ***.
Werkwijze
Op de volgende manier maak je de ruimtelijke tabel met puntgeometriën aan:
- Meld je via pgAdmin aan bij de PostGIS-database en zorg dat je daarbij voldoende gebruikersrechten hebt. Controleer met het SQL-statement:
SELECT postgis_full_version() ;
of de juiste versie van PostGIS is geïnstalleerd. De versie moet 1.5 of hoger zijn. Maak met een SQL-statement (query) een nieuwe ruimtelijke tabel aan met puntgeometrieën. De onderstaande query creëert tabel rx_puntjes in het databaseschema rx met uitsluitend punt-geometrieën. Zie de SQL-statements voor PostGIS 1.5 en voor PostGIS 2.1.
- Maak een ruimtelijke index op het geometrieveld van de tabel. Dat kan met het volgende SQL-statement:
CREATE INDEX index_rx_puntjes_geom ON rx.rx_puntjes USING gist (geom);
Controleer of alles gelukt is door de tabel uit te lezen met:
SELECT gid, label, code, date, state, ST_AsText(geom) FROM rx.rx_puntjes;
Met de PostGIS-functie
ST_AsText
zorg je ervoor dat de RD-coördinaten als tekst worden weergegeven en niet als binaire waarden.
-- Testtabel met puntgeometrieën en vier attributen
-- DROP TABLE rx.rx_puntjes;
CREATE TABLE rx.rx_puntjes
(
gid serial,
geom geometry,
label character varying,
code character varying,
state integer,
date timestamp with time zone,
CONSTRAINT rx_puntjes_pkey PRIMARY KEY (gid),
CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'POINT'::text OR geom IS NULL),
CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 28992) -- of een andere SRID natuurlijk
);
-- En 1 punt-geometrie bij locatie Nieuwland (attributen achteraf zelf invullen)
INSERT INTO rx.rx_puntjes (geom)
VALUES (ST_SetSRID(ST_Point(175135, 442000), 28992));
CREATE TABLE rx.rx_puntjes (gid serial PRIMARY KEY, label varchar, code varchar, state integer, date timestamptz, geom geometry(POINT, 28992));
-- aan deze tabel kan op dezelfde manier een punt toegevoegd worden:
INSERT INTO rx.rx_puntjes2 (label, code, geom) VALUES ('nieuwland', 5, ST_SetSRID(ST_Point(175135, 442000), 28992)) ;
Related articles