A resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql => resources/migrations/20221020100000-multiple-gebruiksdoel.down.sql +7 -0
@@ 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);
A resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql => resources/migrations/20221020100000-multiple-gebruiksdoel.up.sql +7 -0
@@ 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[];
M resources/test/lvbag/9999VBO.xml => resources/test/lvbag/9999VBO.xml +1 -0
@@ 45,6 45,7 @@
</Objecten:punt>
</Objecten:geometrie>
<Objecten:gebruiksdoel>woonfunctie</Objecten:gebruiksdoel>
+ <Objecten:gebruiksdoel>industriefunctie</Objecten:gebruiksdoel>
<Objecten:oppervlakte>72</Objecten:oppervlakte>
<Objecten:status>Verblijfsobject in gebruik</Objecten:status>
<Objecten:geconstateerd>N</Objecten:geconstateerd>
M src/straatnaam/lvbag.clj => src/straatnaam/lvbag.clj +16 -8
@@ 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)]
M src/straatnaam/lvbag/bag.sql => src/straatnaam/lvbag/bag.sql +7 -7
@@ 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
M test/straatnaam/lvbag_test.clj => test/straatnaam/lvbag_test.clj +11 -8
@@ 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}]