Geometry constructors
Geometry constructors er den familie af PostGIS-funktioner, der med forskellige metoder, giver os muligheder for at konstruere geometri som vores database med PostGIS kan arbejde med.
Eksempler
St_MakePoint
Anvendes til at konstruere geometri fra x/y baserede koordinatsæt
727039.01 6173981.01
--Konstruér punkt-geometri med "unknown" SRID
SELECT ST_MakePoint(727039.01 , 6173981.01);
--Konstruér punkt-geometri med SRID 25832 (UTM32)
SELECT ST_SetSRID(ST_MakePoint(727039.01 , 6173981.01),25832);
--Konstuér 3D point (punkt med højde på 1,5 m)
SELECT ST_MakePoint(1, 2,1.5);
-- Konvertér ikke-spatiel tabel med x,y kollonner til geometri
--Tilføj geometrikolonne
ALTER TABLE kursus.adresser
ADD COLUMN geometri geometry(Point,25832);
-- Konstruér geometri
UPDATE kursus.adresser
SET geometri = ST_SetSRID(ST_MakePoint(etrs89koordinat_oest , etrs89koordinat_nord),25832);
--ELLER fra WGS 84 koordinater
UPDATE kursus.adresser
SET geometri = ST_Transform(ST_SetSRID(ST_MakePoint(wgs84koordinat_laengde , wgs84koordinat_bredde),4326),25832);
De konstruerede geometrier ovenfor kan man dermed anvende alle PostGIS-funktionerne på. Eksempelvis kan man udtrække højden på et punkt:
WITH geometri as (
SELECT ST_MakePoint(1, 2,1.5) as the_geom
)
SELECT ST_AsText(the_geom) as wkt, ST_Z(the_geom) as height FROM geometri;
--
[HANDS-ON]: Prøv selv at åbne pgAdmin og åben et sql vindue og se resultatet af ovenstående sql statement.
Konvertér til 2d
Mange datasæt fra f.eks. Kortforsyningen kommer med z-koordinater, hvor det er irrelevant. Det kan være en god idé at fjerne z og andre dimensioner hvis denne information ikke er nødvendige, da nogle software har svært ved at håndtere ekstra dimensioner.
--Tjek antal dimensioner
SELECT ST_NDims(geom) FROM kursus.postnummer;
--Se hvordan det ser ud i klar tekst:
SELECT ST_Astext(st_astext(geom)) AS geom FROM kursus.postnummer
---Fjern unødvendig information
SELECT ST_Astext(ST_Force2D(st_astext(geom))) AS geoma FROM kursus.postnummer
Påtryk SRID
Nogle gange er data i et forkert eller i intet koordinatsystem. Hvis vi kender geometriens SRID, kan vi påklistre det. Det er nødvendigt for at kunne transformere data eller lave spatialle sammenligninger med en anden tabel.
--Tjek aktuelt srid på geomtrier
SELECT ST_Srid(geom) FROM kursus.postnummer;
---Sæt srid til noget andet
UPDATE kursus.postnummer
SET geom = ST_SetSRID(geom,0) --0 er ingen srid
--Sæt srid tilbage til det korrekte
UPDATE kursus.postnummer
SET geom = ST_SetSRID(geom,25832)
Opret geometri fra geoJSON tekst
SELECT ST_AsText(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-48.23456,20.12345]}')) As wkt;
[HANDS-ON]: Prøv selv at opbygge geometrier
Find den funktion, der passer til din opgave:
http://postgis.net/docs/manual-2.1/reference.html#Geometry_Constructors