A resources/migrations/20220921170000-add-pand.down.sql => resources/migrations/20220921170000-add-pand.down.sql +5 -0
@@ 0,0 1,5 @@
+DROP TABLE template.pand;
+--;;
+ALTER TABLE template.verblijfsobject DROP COLUMN pand_ids;
+--;;
+DROP TABLE template.verblijfsobject_pand;
A resources/migrations/20220921170000-add-pand.up.sql => resources/migrations/20220921170000-add-pand.up.sql +15 -0
@@ 0,0 1,15 @@
+CREATE TABLE template.pand (
+ id NUMERIC,
+ begindatum DATE,
+ einddatum DATE,
+ oorspronkelijk_bouwjaar INTEGER
+);
+--;;
+CREATE INDEX pand_id ON template.pand (id, einddatum);
+--;;
+ALTER TABLE template.verblijfsobject ADD COLUMN pand_ids NUMERIC[];
+--;;
+CREATE TABLE template.verblijfsobject_pand (id NUMERIC, pand_id NUMERIC);
+--;;
+CREATE INDEX verblijfsobject_pand_idx ON template.verblijfsobject_pand (id);
+--;;
A resources/test/lvbag/9999PND.xml => resources/test/lvbag/9999PND.xml +52 -0
@@ 0,0 1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sl-bag-extract:bagStand xmlns:DatatypenNEN3610="www.kadaster.nl/schemas/lvbag/imbag/datatypennen3610/v20200601" xmlns:Objecten="www.kadaster.nl/schemas/lvbag/imbag/objecten/v20200601" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:Historie="www.kadaster.nl/schemas/lvbag/imbag/historie/v20200601" xmlns:Objecten-ref="www.kadaster.nl/schemas/lvbag/imbag/objecten-ref/v20200601" xmlns:nen5825="www.kadaster.nl/schemas/lvbag/imbag/nen5825/v20200601" xmlns:KenmerkInOnderzoek="www.kadaster.nl/schemas/lvbag/imbag/kenmerkinonderzoek/v20200601" xmlns:selecties-extract="http://www.kadaster.nl/schemas/lvbag/extract-selecties/v20200601" xmlns:sl-bag-extract="http://www.kadaster.nl/schemas/lvbag/extract-deelbestand-lvc/v20200601" xmlns:sl="http://www.kadaster.nl/schemas/standlevering-generiek/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.kadaster.nl/schemas/lvbag/extract-deelbestand-lvc/v20200601 https://developer.kadaster.nl/schemas/lvbag/extract-deelbestand-lvc/v20200601/BagvsExtractDeelbestandExtractLvc-2.1.0.xsd">
+ <sl-bag-extract:bagInfo>
+ <selecties-extract:Gebied-Registratief>
+ <selecties-extract:Gebied-NLD/>
+ </selecties-extract:Gebied-Registratief>
+ <selecties-extract:LVC-Extract>
+ <selecties-extract:StandTechnischeDatum>2022-09-08</selecties-extract:StandTechnischeDatum>
+ </selecties-extract:LVC-Extract>
+ </sl-bag-extract:bagInfo>
+ <sl:standBestand>
+ <sl:dataset>LVBAG</sl:dataset>
+ <sl:inhoud>
+ <sl:gebied>Nederland</sl:gebied>
+ <sl:leveringsId>0000000001</sl:leveringsId>
+ <sl:objectTypen>
+ <sl:objectType>PND</sl:objectType>
+ </sl:objectTypen>
+ </sl:inhoud>
+ <sl:stand>
+ <sl-bag-extract:bagObject>
+ <Objecten:Pand>
+ <Objecten:identificatie domein="NL.IMBAG.Pand">1883100000010452</Objecten:identificatie>
+ <Objecten:geometrie>
+ <gml:Polygon srsName="urn:ogc:def:crs:EPSG::28992" srsDimension="3">
+ <gml:exterior>
+ <gml:LinearRing>
+ <gml:posList count="9">188376.995 334581.675 0.0 188370.87 334579.013 0.0 188370.285 334579.94 0.0 188361.359 334569.248 0.0 188362.136 334568.568 0.0 188398.225 334587.71 0.0 188396.595 334590.91 0.0 188387.971 334586.446 0.0 188376.995 334581.675 0.0</gml:posList>
+ </gml:LinearRing>
+ </gml:exterior>
+ </gml:Polygon>
+ </Objecten:geometrie>
+ <Objecten:oorspronkelijkBouwjaar>1880</Objecten:oorspronkelijkBouwjaar>
+ <Objecten:status>Pand in gebruik</Objecten:status>
+ <Objecten:geconstateerd>N</Objecten:geconstateerd>
+ <Objecten:documentdatum>2011-07-28</Objecten:documentdatum>
+ <Objecten:documentnummer>602769</Objecten:documentnummer>
+ <Objecten:voorkomen>
+ <Historie:Voorkomen>
+ <Historie:voorkomenidentificatie>2</Historie:voorkomenidentificatie>
+ <Historie:beginGeldigheid>2011-07-28</Historie:beginGeldigheid>
+ <Historie:tijdstipRegistratie>2011-08-03T15:20:51.000</Historie:tijdstipRegistratie>
+ <Historie:BeschikbaarLV>
+ <Historie:tijdstipRegistratieLV>2011-08-03T15:35:38.019</Historie:tijdstipRegistratieLV>
+ </Historie:BeschikbaarLV>
+ </Historie:Voorkomen>
+ </Objecten:voorkomen>
+ </Objecten:Pand>
+ </sl-bag-extract:bagObject>
+ </sl:stand>
+ </sl:standBestand>
+</sl-bag-extract:bagStand>
M src/straatnaam/lvbag.clj => src/straatnaam/lvbag.clj +42 -22
@@ 157,17 157,24 @@
(defn int-arr-val [vals]
(str "{" (string/join "," vals) "}"))
+(def parse-pand-xml
+ (partial parse-bag-objects :Pand
+ (fn [{:keys [oorspronkelijkBouwjaar]}]
+ {:oorspronkelijk_bouwjaar (some-> oorspronkelijkBouwjaar first biginteger)})))
+
(def parse-verblijfsobject-xml
(partial parse-bag-objects :Verblijfsobject
(fn [{:keys [gebruiksdoel
heeftAlsHoofdadres
heeftAlsNevenadres
- oppervlakte]
+ oppervlakte
+ maaktDeelUitVan]
:as rec}]
(into {:gebruiksdoel (some-> gebruiksdoel first)
:nummeraanduiding_id (some-> heeftAlsHoofdadres :NummeraanduidingRef first bigdec)
:neven_nummeraanduiding_ids (some->> heeftAlsNevenadres :NummeraanduidingRef (map bigdec) int-arr-val)
- :oppervlakte (some-> oppervlakte first biginteger)}
+ :oppervlakte (some-> oppervlakte first biginteger)
+ :pand_ids (some->> maaktDeelUitVan :PandRef (map bigdec) int-arr-val)}
(parse-point-geometrie :geometrie rec)))))
(def parse-ligplaats-xml
@@ 219,7 226,7 @@
(map #(case %
(:geometrie) "?::gis.GEOMETRY"
(:begindatum :einddatum) "?::DATE"
- (:neven_nummeraanduiding_ids) "?::NUMERIC[]"
+ (:neven_nummeraanduiding_ids :pand_ids) "?::NUMERIC[]"
"?"))
(string/join ", "))
table (str sn "." table)]
@@ 232,32 239,44 @@
(str "CREATE SCHEMA " sn "")]
(map #(str "CREATE TABLE " sn "." %
" (LIKE template." % " INCLUDING ALL)")
- ["nummeraanduiding"
- "openbareruimte"
- "verblijfsobject"
+ ["bag"
"ligplaats"
+ "ligplaats_neven"
+ "nummeraanduiding"
+ "openbareruimte"
+ "pand"
"standplaats"
- "woonplaats"
- "verblijfsobject_neven"
"standplaats_neven"
- "ligplaats_neven"
- "bag"]))))
+ "verblijfsobject"
+ "verblijfsobject_neven"
+ "verblijfsobject_pand"
+ "woonplaats"]))))
(defn- insert-links! [db sn]
(log/debug "inserting linking data for" sn)
(sql/db-do-commands db true
- (map #(str "INSERT INTO " sn "." % "_neven
- SELECT id, a[i] FROM (
- SELECT
- x.id AS id,
- x.neven_nummeraanduiding_ids AS a,
- GENERATE_SUBSCRIPTS(x.neven_nummeraanduiding_ids, 1) AS i
- FROM " sn "." % " x
- WHERE x.einddatum IS NULL
- ) y")
- ["verblijfsobject"
- "standplaats"
- "ligplaats"])))
+ (into [(str "INSERT INTO " sn ".verblijfsobject_pand
+ SELECT id, a[i] FROM (
+ SELECT
+ x.id AS id,
+ x.pand_ids AS a,
+ GENERATE_SUBSCRIPTS(x.pand_ids, 1) AS i
+ FROM " sn ".verblijfsobject x
+ WHERE x.einddatum IS NULL
+ ) y")]
+ (map #(str "INSERT INTO " sn "." % "_neven
+ SELECT id, a[i] FROM (
+ SELECT
+ x.id AS id,
+ x.neven_nummeraanduiding_ids AS a,
+ GENERATE_SUBSCRIPTS(x.neven_nummeraanduiding_ids, 1) AS i
+ FROM " sn "." % " x
+ WHERE x.einddatum IS NULL
+ ) y")
+ ["verblijfsobject"
+ "standplaats"
+ "ligplaats"]))))
+
(defn- insert-bag! [db sn]
(log/debug "inserting bag data for" sn)
(sql/db-do-commands db true
@@ 284,6 303,7 @@
[table
parse] ({"9999NUM" ["nummeraanduiding" parse-nummeraanduiding-xml]
"9999OPR" ["openbareruimte" parse-openbare-ruimte-xml]
+ "9999PND" ["pand" parse-pand-xml]
"9999VBO" ["verblijfsobject" parse-verblijfsobject-xml]
"9999LIG" ["ligplaats" parse-ligplaats-xml]
"9999STA" ["standplaats" parse-standplaats-xml]
M src/straatnaam/lvbag/bag.sql => src/straatnaam/lvbag/bag.sql +1 -1
@@ 53,7 53,7 @@ JOIN openbareruimte opr
ON opr.id = num.openbareruimte_id AND opr.einddatum IS NULL
LEFT JOIN woonplaats wpl
ON wpl.id = num.woonplaats_id AND wpl.einddatum IS NULL
-JOIN woonplaats wpl2
+LEFT JOIN woonplaats wpl2
ON wpl2.id = opr.woonplaats_id AND wpl2.einddatum IS NULL
LEFT JOIN verblijfsobject vbo
ON vbo.nummeraanduiding_id = num.id AND vbo.einddatum IS NULL
M test/straatnaam/lvbag_test.clj => test/straatnaam/lvbag_test.clj +10 -0
@@ 87,6 87,16 @@
(is (= "2010-04-06" (:begindatum r1)))
(is (= "Hoogerheide" (:naam r1))))))
+(deftest parse-pand-xml
+ (with-open [in (io/reader (io/resource "test/lvbag/9999PND.xml"))]
+ (let [result (lvbag/parse-pand-xml in)
+ [r] result]
+ (is (= 1 (count result)))
+
+ (is (= 1883100000010452M (:id r)))
+ (is (= "2011-07-28" (:begindatum r)))
+ (is (= 1880 (:oorspronkelijk_bouwjaar r))))))
+
(deftest parse-atom-feed
(with-open [in (io/reader (io/resource "test/adressen.xml"))]
(let [{:keys [url updated]} (lvbag/parse-atom-feed in)]