Komplexní úlohy zpracování dat katastru nemovitostí - první část
Otázky
1. Kolik je v daném katastrálním území parcel? Jaké procento tvoří parcely zjednodušené evidence? |
1517 parcel, z toho se žádné parcely ZE se v k.ú. 602515 nevyskytují |
2. Na kolika parcelách stojí budovy? Kolik procent těchto budov je "součástí pozemku" a které nikoli? |
168 parcel. Budovy, které na těchto parcelách stojí jsou z 89 % vedeny, že jsou "součástí pozemku". |
|
3. Spočti nový atribut ANALYZA_VYMERY, který při absolutním rozdílu mezi výměrou SPI a SGI menším než 2 m2 bude mít textovou hodnotu 'Ok'. V opačném případě bude mít textovou hodnotu 'Rozdíl větší než 2 m2'. Kolik parcel s odchylkou větší než 2 m2 se v katastrálním území vyskytuje? |
1145 |
4. Sestav dotaz, ve kterém budou parcely s odchylkou ve výměře větší než 2 m2 zgrupovány podle druhu pozemku. Co se stane, když vezmeme v potaz kód způsobu určení výměry? |
DRUH POZEMKU: POCET PARCEL, ostatní plocha = 360, trvalý travní porost = 305, orná půda = 216, lesní pozemek = 96, zastavěná plocha a nádvoří = 80, zahrada = 59, vodní plocha = 29. Žádná z parcel s výměrou určenou ze souřadnic v S-JSTK ale mezní odchylku 2 m2 nepřekračuje (WHERE "ZPURVY_KOD" = 2). |
|
5. Vypiš statistiku počtu parcel podle všech existujících druhů pozemku. Tuto statistiku ulož do pohledu. |
DRUH_POZEMKU: POCET_PARCEL ostatní plocha = 511, trvalý travní porost = 355, orná půda = 251, zastavěná plocha a nádvoří = 172, lesní pozemek = 107, zahrada = 76, vodní plocha = 45, vinice = 0, chmelnice = 0, ovocný sad = 0 |
6. Vypiš statistiku počtu parcel podle všech druhů pozemku a způsobu využití parcely. Tuto statistiku ulož do pohledu. |
|
7. Napiš dotaz na sestavení parcelního čísla. Skladá se z kmenového čísla a poddělení. Poddělení může být i NULL, pak je uvedeno pouze kmenové číslo. |
|
Řešení
1. Kolik je v daném katastrálním území parcel? Jaké procento tvoří parcely zjednodušené evidence? |
1517 parcel, z toho se žádné parcely ZE se v k.ú. 602515 nevyskytují |
select
(select count(*) from "PAR" where "PAR_TYPE" = 'PZE')
/
(select count(*) from "PAR")::numeric;
2. Na kolika parcelách stojí budovy? Kolik procent těchto budov je "součástí pozemku" a které nikoli? |
168 parcel. Budovy, které na těchto parcelách stojí jsou z 89 % vedeny, že jsou "součástí pozemku". |
|
SELECT
(select count(*) from "PAR" WHERE "SOUCASTI" = 'n' AND "BUD_ID" IS NOT NULL)
/
(select count(*)
FROM "PAR"
WHERE "BUD_ID" IS NOT NULL)
::numeric;
3. Spočti nový atribut ANALYZA_VYMERY, který při absolutním rozdílu mezi výměrou SPI a SGI menším než 2 m2 bude mít textovou hodnotu 'Ok'. V opačném případě bude mít textovou hodnotu 'Rozdíl větší než 2 m2'. Kolik parcel s odchylkou větší než 2 m2 se v katastrálním území vyskytuje? |
1145 |
SELECT COUNT(*)
FROM (
SELECT "ID", "VYMERA_PARCELY" AS "VYMERA_SPI", ST_Area("geom") AS "VYMERA_SGI",
CASE WHEN ABS("VYMERA_PARCELY" - ST_Area("geom")) <= 2
THEN 'Ok' ELSE 'Rozdil vetsi nez 2 m2'
END AS "ANALYZA_VYMERY"
FROM "PAR"
) AS subquery
WHERE "ANALYZA_VYMERY" = 'Rozdil vetsi nez 2 m2';
4. Sestav dotaz, ve kterém budou parcely s odchylkou ve výměře větší než 2 m2 zgrupovány podle druhu pozemku. Co se stane, když vezmeme v potaz kód způsobu určení výměry? |
DRUH POZEMKU: POCET PARCEL, ostatní plocha = 360, trvalý travní porost = 305, orná půda = 216, lesní pozemek = 96, zastavěná plocha a nádvoří = 80, zahrada = 59, vodní plocha = 29. Žádná z parcel s výměrou určenou ze souřadnic v S-JSTK ale mezní odchylku 2 m2 nepřekračuje (WHERE "ZPURVY_KOD" = 2). |
|
SELECT "NAZEV" AS "DRUH_POZEMKU", COUNT("ID") AS "POCET_PARCEL"
FROM (
SELECT "ID", "VYMERA_PARCELY" AS "VYMERA_SPI", ST_Area("geom") AS "VYMERA_SGI", "DRUPOZ"."NAZEV",
CASE WHEN ABS("VYMERA_PARCELY" - ST_Area("geom")) <= 2 THEN 'Ok'
ELSE 'Rozdil vetsi nez 2 m2'
END AS "ANALYZA_VYMERY"
FROM "PAR"
JOIN "DRUPOZ" ON ("PAR"."DRUPOZ_KOD" = "DRUPOZ"."KOD")
) AS subquery
WHERE "ANALYZA_VYMERY" = 'Rozdil vetsi nez 2 m2'
GROUP BY "NAZEV"
ORDER BY "POCET_PARCEL" DESC;
5. Vypiš statistiku počtu parcel podle všech existujících druhů pozemku. Tuto statistiku ulož do pohledu. |
DRUH_POZEMKU: POCET_PARCEL ostatní plocha = 511, trvalý travní porost = 355, orná půda = 251, zastavěná plocha a nádvoří = 172, lesní pozemek = 107, zahrada = 76, vodní plocha = 45, vinice = 0, chmelnice = 0, ovocný sad = 0 |
SELECT "NAZEV" AS "DRUH_POZEMKU", COUNT("ID") AS "POCET_PARCEL"
FROM "PAR"
RIGHT JOIN "DRUPOZ" ON ("PAR"."DRUPOZ_KOD" = "DRUPOZ"."KOD")
GROUP BY "NAZEV"
ORDER BY "POCET_PARCEL" DESC;
stejné řešení pomocí LEFT JOINu
SELECT "NAZEV" AS "DRUH_POZEMKU", COUNT("ID") AS "POCET_PARCEL"
FROM "DRUPOZ"
LEFT JOIN "PAR" ON ("PAR"."DRUPOZ_KOD" = "DRUPOZ"."KOD")
GROUP BY "NAZEV"
ORDER BY "POCET_PARCEL" DESC;
vytvoření pohledu
CREATE OR REPLACE VIEW "DRUPOZ_STATS_VIEW" AS
SELECT "NAZEV" AS "DRUH_POZEMKU", COUNT("ID") AS "POCET_PARCEL"
FROM "DRUPOZ"
LEFT JOIN "PAR" ON ("PAR"."DRUPOZ_KOD" = "DRUPOZ"."KOD")
GROUP BY "NAZEV";
select * from DRUPOZ_STATS_VIEW;
6. Vypiš statistiku počtu parcel podle všech druhů pozemku a způsobu využití parcely. Tuto statistiku ulož do pohledu. |
|
CREATE OR REPLACE VIEW "DRUPOZ_ZPVYPA_STATS_VIEW" AS
SELECT "DRUPOZ"."NAZEV" AS "DRUH_POZEMKU",
"ZPVYPO"."NAZEV" AS "ZPUSOB_VYUZITI",
COUNT("ID") AS "POCET_PARCEL"
FROM "DRUPOZ"
JOIN "PAR" ON ("PAR"."DRUPOZ_KOD" = "DRUPOZ"."KOD")
LEFT JOIN "ZPVYPO" ON ("PAR"."ZPVYPA_KOD" = "ZPVYPO"."KOD")
GROUP BY "DRUPOZ"."NAZEV", "ZPVYPO"."NAZEV";
7. Napiš dotaz na sestavení parcelního čísla. Skladá se z kmenového čísla a poddělení. Poddělení může být i NULL, pak je uvedeno pouze kmenové číslo. |
|
SELECT
"ID", "KMENOVE_CISLO_PAR" ||
CASE WHEN "PODDELENI_CISLA_PAR" IS NOT NULL
THEN '/' || "PODDELENI_CISLA_PAR"
ELSE ''
END AS "Parcelni_cislo"
FROM
"PAR";
Další možné řešení
SELECT
"ID", "KMENOVE_CISLO_PAR" || COALESCE('/' || "PODDELENI_CISLA_PAR", '') AS "PARCELNI_CISLO"
FROM
"PAR";
Řešení pomocí obecné funkce a jejího zavolání v rámci SELECTu
CREATE OR REPLACE FUNCTION sestav_parcelni_cislo(kmenove_cislo INTEGER, poddeleni INTEGER)
RETURNS text AS $$
BEGIN
RETURN kmenove_cislo || COALESCE('/' || poddeleni, '');
END;
$$ LANGUAGE plpgsql;
SELECT
"ID", sestav_parcelni_cislo("KMENOVE_CISLO_PAR", "PODDELENI_CISLA_PAR") AS "PARCELNI_CISLO"
FROM
"PAR";