Spatial Relationships and Measurements

Med PostGIS kan man udføre enkle og meget avancerede analyser med de mange funktioner til at spørge om spatialle "relations" mellem geometrieobjekter. Man kan også udføre geometriske beregninger som arealer, længer, omkreds osv med "measurements funnktioner"

Det er meget vigtigt at geomtrierne er valide fordi beregninger på ugyldige geometrier kan resultere i fejlbehæftede resultater. Eksemplevis kan arealberegninger give forkerte resultater, hvis de udføres på ugyldige geometriobjekter. Derudover er det nødvendigt at geomtrierne har samme SRID (spatielt refenrencesystem) når der foretages geografiske sammenligninger (relationships). Derfor kan det være nødvendigt at reprojicere geomtrier, der ikke har samme SRID når der skal foretages analyser

Eksempler på GIS analyser med PostGIS

Measurements

Beregn arealer på bygninger
SELECT ST_Area(wkb_geometry) as areal, * FROM kursus.bygning LIMIT 10;
Beregn samlet areal af bygninger
SELECT ST_Area(ST_Union(wkb_geometry)) as m2 FROM kursus.bygning LIMIT 1000;
Beregn omkreds
SELECT
 ST_Length(ST_ExteriorRing(wkb_geometry)) as omkreds,
 ST_Area(wkb_geometry) as areal,
 * 
 FROM kursus.bygning LIMIT 10;

Relations

Find adresser tæt på bygninger med underholdning (100m)

--Opret bygning med bbr info
DROP VIEW IF EXISTS kursus.bygning_bbr;
CREATE VIEW kursus.bygning_bbr AS
SELECT 
  row_number() over() as id
  ,fbyg.bygn_uuid
  ,fbyg.wkb_geometry
  ,bbrbyg.*
  FROM kursus.bygning AS fbyg
JOIN kursus.CO40100t AS bbrbyg
ON (bbrbyg.bygning_id=fbyg.bygn_uuid::uuid);

--Opret et view med adresser tæt på (100 meter) biograf, teater
DROP VIEW IF EXISTS kursus.varselsbrevenaarstorfest;
CREATE OR REPLACE VIEW kursus.varselsbrevenaarstorfest AS
WITH
 biograffermm AS (
SELECT 
   fbyg.bygn_uuid
  ,fbyg.wkb_geometry
  ,fbyg.byg_anvend_kode
FROM kursus.bygning_bbr AS fbyg --view der netop er dannet ovenfor
WHERE fbyg.byg_anvend_kode=410 -- Bygning til biograf, teater, erhvervsmæssig udstilling, bibliotek, museum, kirke o. lign
 ),
 biograffermm100meterbuffer AS (
SELECT 
   bygn_uuid,
   ST_Buffer(wkb_geometry,100) as geom --buffer med 100 meter
FROM biograffermm --buffer på 100 meter på bygninger
 )
SELECT
 row_number() over() as id,
 adr.vejnavn,
 adr.husnr,
 adr.geometri
FROM kursus.adgangsadresser AS adr
JOIN biograffermm100meterbuffer AS buf ON
(st_intersects(adr.geometri,buf.geom)) --spatialt join på bygninger med buffer 100 -> adresser i nærheden udvælges og kan tilsendes varselsbrev

Prøv at tegne resultatet i QGIS. Vis view kursus.bygning_bbr og giv farve for 410 og resten grå.

Prøv at oprette en nye bygning (tæt på nogle andre adresser) i bygning og bbr tabel med kode 410.

Find nærmeste (nabo)adresse for hver adresse
SELECT  g1.id,
    g2.id,
    ST_AsText(g1.geometri),
    ST_AsText(g2.geometri),
    ST_Distance(g1.geometri,g2.geometri)
    FROM kursus.adgangsadresser AS g1
    CROSS JOIN LATERAL
    (
    SELECT
    g3.id,
    g3.geometri
    FROM
    kursus.adgangsadresser AS g3
    WHERE g1.id!=g3.id
    ORDER BY g3.geometri <-> g1.geometri ASC LIMIT 1
    ) AS g2
    ORDER BY st_distance;

--

[HANDS-ON]: Prøv selv at finde på spørgmsål, der skal besvares med SQL

results matching ""

    No results matching ""