From 3bf5693dc08d9a67784722831010e52a7215fcf7 Mon Sep 17 00:00:00 2001 From: Carlo Sciolla Date: Thu, 20 Oct 2022 10:25:26 +0200 Subject: [PATCH] Track all gebruiksdoel for a given VBO There can be multiple destination of use for a given residence. The order doesn't appear to be as meaningful as the combination of the uses together. This change allows for all `gebruiksdoel` values to be tracked in `straatnaam` --- ...21020100000-multiple-gebruiksdoel.down.sql | 7 ++++++ ...0221020100000-multiple-gebruiksdoel.up.sql | 7 ++++++ resources/test/lvbag/9999VBO.xml | 1 + src/straatnaam/lvbag.clj | 24 ++++++++++++------- src/straatnaam/lvbag/bag.sql | 14 +++++------ test/straatnaam/lvbag_test.clj | 19 ++++++++------- 6 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql create mode 100644 resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql diff --git a/resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql b/resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql new file mode 100644 index 0000000..bcb385f --- /dev/null +++ b/resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql @@ -0,0 +1,7 @@ +ALTER TABLE template.bag + DROP COLUMN gebruiksdoelen +, ADD COLUMN gebruiksdoel CHARACTER VARYING(24); +--;; +ALTER TABLE template.verblijfsobject + DROP COLUMN gebruiksdoelen +, ADD COLUMN gebruiksdoel CHARACTER VARYING(24); diff --git a/resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql b/resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql new file mode 100644 index 0000000..1989c27 --- /dev/null +++ b/resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql @@ -0,0 +1,7 @@ +ALTER TABLE template.bag + DROP COLUMN gebruiksdoel +, ADD COLUMN gebruiksdoelen TEXT[]; +--;; +ALTER TABLE template.verblijfsobject + DROP COLUMN gebruiksdoel +, ADD COLUMN gebruiksdoelen TEXT[]; diff --git a/resources/test/lvbag/9999VBO.xml b/resources/test/lvbag/9999VBO.xml index f40bb74..8a8b274 100644 --- a/resources/test/lvbag/9999VBO.xml +++ b/resources/test/lvbag/9999VBO.xml @@ -45,6 +45,7 @@ woonfunctie + industriefunctie 72 Verblijfsobject in gebruik N diff --git a/src/straatnaam/lvbag.clj b/src/straatnaam/lvbag.clj index 3fdf788..43dec21 100644 --- a/src/straatnaam/lvbag.clj +++ b/src/straatnaam/lvbag.clj @@ -1,6 +1,7 @@ ;; Straatnaam - Expose BAG Extract data to do postcode/number completion ;; -;; Copyright (C) 2021 Remco van 't Veer +;; Copyright (C) 2021, 2022 Remco van 't Veer +;; Copyright (C) 2022 Carlo Sciolla ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU Affero General Public License as published by @@ -25,7 +26,13 @@ (:import [java.io File InputStreamReader] java.net.URL java.text.SimpleDateFormat - java.util.zip.ZipInputStream)) + java.util.zip.ZipInputStream + org.postgresql.jdbc.PgArray)) + +(extend-protocol sql/IResultSetReadColumn + PgArray + (result-set-read-column [v _ _] + (vec (.getArray v)))) (def status-inactief #{"Naamgeving ingetrokken" @@ -163,7 +170,7 @@ {:naam (some-> naam first) :woonplaats_id (some-> ligtIn :WoonplaatsRef first bigdec)}))) -(defn int-arr-val [vals] +(defn arr-val [vals] (str "{" (string/join "," vals) "}")) (def parse-pand-xml @@ -179,11 +186,11 @@ oppervlakte maaktDeelUitVan] :as rec}] - (into {:gebruiksdoel (some-> gebruiksdoel first) + (into {:gebruiksdoelen (some-> gebruiksdoel arr-val) :nummeraanduiding_id (some-> heeftAlsHoofdadres :NummeraanduidingRef first bigdec) - :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) int-arr-val) + :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) arr-val) :oppervlakte (some-> oppervlakte first biginteger) - :pand_ids (some->> maaktDeelUitVan :PandRef (map bigdec) int-arr-val)} + :pand_ids (some->> maaktDeelUitVan :PandRef (map bigdec) arr-val)} (parse-point-geometrie :geometrie rec))))) (def parse-ligplaats-xml @@ -192,7 +199,7 @@ heeftAlsNevenadres] :as rec}] (into {:nummeraanduiding_id (some-> heeftAlsHoofdadres :NummeraanduidingRef first bigdec) - :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) int-arr-val)} + :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) arr-val)} (parse-polygon-geometrie :geometrie rec))))) (def parse-standplaats-xml @@ -201,7 +208,7 @@ heeftAlsNevenadres] :as rec}] (into {:nummeraanduiding_id (some-> heeftAlsHoofdadres :NummeraanduidingRef first bigdec) - :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) int-arr-val)} + :neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) arr-val)} (parse-polygon-geometrie :geometrie rec))))) (def parse-woonplaats-xml @@ -238,6 +245,7 @@ (:neven_nummeraanduiding_ids :pand_ids) "?::NUMERIC[]" (:status) "?::status" (:actief) "?::BOOLEAN" + (:gebruiksdoelen) "?::TEXT[]" "?")) (string/join ", ")) table (str sn "." table)] diff --git a/src/straatnaam/lvbag/bag.sql b/src/straatnaam/lvbag/bag.sql index 9e70a7d..d620866 100644 --- a/src/straatnaam/lvbag/bag.sql +++ b/src/straatnaam/lvbag/bag.sql @@ -18,12 +18,6 @@ SELECT DISTINCT ON (num.id) gis.ST_Y(gis.ST_CENTROID(lig2.geometrie)), gis.ST_Y(gis.ST_CENTROID(sta.geometrie)), gis.ST_Y(gis.ST_CENTROID(sta2.geometrie))) AS y, - CASE - WHEN vbo.id IS NOT NULL OR vbo2.id IS NOT NULL THEN COALESCE(vbo.gebruiksdoel, vbo2.gebruiksdoel) - WHEN lig.id IS NOT NULL OR lig2.id IS NOT NULL THEN 'ligplaats' - WHEN sta.id IS NOT NULL OR sta2.id IS NOT NULL THEN 'standplaats' - ELSE NULL - END AS gebruiksdoel, vbo2.id IS NOT NULL OR lig2.id IS NOT NULL OR sta2.id IS NOT NULL AS nevenadres, CASE WHEN vbo.id IS NOT NULL OR vbo2.id IS NOT NULL THEN 'verblijfsobject' @@ -45,7 +39,13 @@ SELECT DISTINCT ON (num.id) gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(lig.geometrie), 4326)), gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(lig2.geometrie), 4326)), gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(sta.geometrie), 4326)), - gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(sta2.geometrie), 4326))) AS breedtegraad + gis.ST_Y(gis.ST_TRANSFORM(gis.ST_CENTROID(sta2.geometrie), 4326))) AS breedtegraad, + CASE + WHEN vbo.id IS NOT NULL OR vbo2.id IS NOT NULL THEN COALESCE(vbo.gebruiksdoelen, vbo2.gebruiksdoelen) + WHEN lig.id IS NOT NULL OR lig2.id IS NOT NULL THEN '{"ligplaats"}' + WHEN sta.id IS NOT NULL OR sta2.id IS NOT NULL THEN '{"standplaats"}' + ELSE NULL + END AS gebruiksdoelen FROM nummeraanduiding num LEFT JOIN openbareruimte opr diff --git a/test/straatnaam/lvbag_test.clj b/test/straatnaam/lvbag_test.clj index 9b7f84e..5d1ff8e 100644 --- a/test/straatnaam/lvbag_test.clj +++ b/test/straatnaam/lvbag_test.clj @@ -1,6 +1,7 @@ ;; Straatnaam - Expose BAG Extract data to do postcode/number completion ;; -;; Copyright (C) 2021 Remco van 't Veer +;; Copyright (C) 2021, 2022 Remco van 't Veer +;; Copyright (C) 2022 Carlo Sciolla ;; ;; This program is free software: you can redistribute it and/or modify ;; it under the terms of the GNU Affero General Public License as published by @@ -52,7 +53,9 @@ (is (= 10000057469M (:id r1))) (is (= "2018-03-26" (:begindatum r1))) (is (= "SRID=28992;POINT(188391.884 334586.439 0.0)" - (:geometrie r1)))))) + (:geometrie r1))) + (is (= "{woonfunctie,industriefunctie}" + (:gebruiksdoelen r1)))))) (deftest parse-ligplaats-xml (with-open [in (io/reader (io/resource "test/lvbag/9999LIG.xml"))] @@ -115,7 +118,7 @@ (are [pc hn x] (= x (map #(dissoc % :x :y :breedtegraad :lengtegraad) - (lvbag/lookup test-db/*db* test-db/version pc hn))) + (lvbag/lookup test-db/*db* test-db/version pc hn))) "1011AB" 105 [{:id 363200000081086M :openbareruimte "De Ruijterkade" @@ -124,7 +127,7 @@ :huisnummertoevoeging "1" :postcode "1011AB" :woonplaats "Amsterdam" - :gebruiksdoel "kantoorfunctie" + :gebruiksdoelen ["kantoorfunctie"] :nevenadres false :object_type "verblijfsobject" :object_id 363010000964973M} @@ -135,7 +138,7 @@ :huisnummertoevoeging "2" :postcode "1011AB" :woonplaats "Amsterdam" - :gebruiksdoel "kantoorfunctie" + :gebruiksdoelen ["kantoorfunctie"] :nevenadres true :object_type "verblijfsobject" :object_id 363010000964973M} @@ -146,7 +149,7 @@ :huisnummertoevoeging "3" :postcode "1011AB" :woonplaats "Amsterdam" - :gebruiksdoel "kantoorfunctie" + :gebruiksdoelen ["kantoorfunctie"] :nevenadres true :object_type "verblijfsobject" :object_id 363010000964973M}] @@ -159,7 +162,7 @@ :huisnummertoevoeging nil :postcode "5011XA" :woonplaats "Tilburg" - :gebruiksdoel "standplaats" + :gebruiksdoelen ["standplaats"] :nevenadres false :object_type "standplaats" :object_id 855030000000044M}] @@ -172,7 +175,7 @@ :huisletter nil :postcode "9981EE" :woonplaats "Uithuizen" - :gebruiksdoel "ligplaats" + :gebruiksdoelen ["ligplaats"] :nevenadres false :object_type "ligplaats" :object_id 1651020000024001M}] -- 2.45.2