~jomco/straatnaam

3bf5693dc08d9a67784722831010e52a7215fcf7 — Carlo Sciolla 1 year, 10 months ago 02b954c
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`
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}]