bag_create_queries.pgsql 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566
  1. /*
  2. BAG importer
  3. Dit script verrijkt de geïmporteerde BAG met de gegevens die
  4. nodig zijn om handige analyses te doen. Dit gebeurt door een
  5. aantal tussenstappen te nemen die uiteindelijk resulteren in
  6. de tabellen pand_compleet en verblijfsobject_compleet. De
  7. overige tabellen kunnen vervolgens verwijderd worden.
  8. */
  9. DROP TABLE IF EXISTS bagactueel.verblijfsobject_compleet CASCADE;
  10. DROP TABLE IF EXISTS bagactueel.pand_compleet;
  11. DROP TABLE IF EXISTS bagactueel.pand_oppervlakte CASCADE;
  12. DROP TABLE IF EXISTS bagactueel.temp_verblijfsobject_oppervlakte;
  13. DROP MATERIALIZED VIEW IF EXISTS bagactueel.pand_adres;
  14. DROP MATERIALIZED VIEW IF EXISTS bagactueel.wp_gem_prov;
  15. UPDATE bagactueel.pand
  16. SET bouwjaar = NULL
  17. WHERE bouwjaar > 2050;
  18. UPDATE bagactueel.verblijfsobject
  19. SET oppervlakteverblijfsobject = NULL
  20. WHERE oppervlakteverblijfsobject IN (1, 9999, 99999, 999999);
  21. /* Maak nieuwe tabel aan voor complete verblijfsobjecten */
  22. CREATE TABLE bagactueel.verblijfsobject_compleet(
  23. gid serial,
  24. identificatie numeric(16,0),
  25. verblijfsobjectstatus bagactueel.verblijfsobjectstatus,
  26. oppervlakteverblijfsobject numeric(6,0),
  27. gebruiksdoelverblijfsobject bagactueel.gebruiksdoelverblijfsobject,
  28. gerelateerdpand numeric(16,0),
  29. geopunt geometry(PointZ,28992),
  30. openbareruimtenaam varchar(80),
  31. huisnummer numeric(5,0),
  32. huisletter varchar(1),
  33. huisnummertoevoeging varchar(4),
  34. postcode varchar(6),
  35. woonplaatsnaam varchar(80),
  36. gemeentenaam varchar(80),
  37. provincienaam varchar(16)
  38. );
  39. /* Zorg ervoor dat er geen dubbelingen kunnen ontstaan door een UNIQUE INDEX op de identificatie te zetten */
  40. CREATE UNIQUE INDEX bagactueel_identificatie ON bagactueel.verblijfsobject_compleet (identificatie);
  41. /* Voeg de verschillende VO tabellen en de adres-tabel samen */
  42. INSERT INTO bagactueel.verblijfsobject_compleet (
  43. identificatie,
  44. verblijfsobjectstatus,
  45. oppervlakteverblijfsobject,
  46. gebruiksdoelverblijfsobject,
  47. gerelateerdpand,
  48. geopunt,
  49. openbareruimtenaam,
  50. huisnummer,
  51. huisletter,
  52. huisnummertoevoeging,
  53. postcode,
  54. woonplaatsnaam,
  55. gemeentenaam,
  56. provincienaam
  57. ) SELECT
  58. VO.identificatie,
  59. VO.verblijfsobjectstatus,
  60. VO.oppervlakteverblijfsobject,
  61. VOGD.gebruiksdoelverblijfsobject,
  62. VOGP.gerelateerdpand,
  63. VO.geopunt,
  64. A.openbareruimtenaam,
  65. A.huisnummer,
  66. A.huisletter,
  67. A.huisnummertoevoeging,
  68. A.postcode,
  69. A.woonplaatsnaam,
  70. A.gemeentenaam,
  71. A.provincienaam
  72. FROM
  73. bagactueel.verblijfsobjectactueelbestaand VO
  74. LEFT JOIN bagactueel.verblijfsobjectgebruiksdoelactueelbestaand VOGD
  75. ON VO.identificatie = VOGD.identificatie
  76. LEFT JOIN bagactueel.verblijfsobjectpandactueelbestaand VOGP
  77. ON VO.identificatie = VOGP.identificatie
  78. LEFT JOIN bagactueel.adres A
  79. ON VO.identificatie = A.adresseerbaarobject
  80. AND A.nevenadres = FALSE
  81. ON CONFLICT DO NOTHING;
  82. /* Maak indexen zodat snel op deze kolommen gefilterd kan worden */
  83. CREATE INDEX verblijfsobject_gerelateerdpand ON bagactueel.verblijfsobject_compleet (gerelateerdpand);
  84. CREATE INDEX verblijfsobject_gebruiksdoel ON bagactueel.verblijfsobject_compleet (gebruiksdoelverblijfsobject);
  85. CREATE INDEX verblijfsobject_woonplaats ON bagactueel.verblijfsobject_compleet (woonplaatsnaam);
  86. CREATE INDEX verblijfsobject_gemeente ON bagactueel.verblijfsobject_compleet (gemeentenaam);
  87. CREATE INDEX verblijfsobject_provincie ON bagactueel.verblijfsobject_compleet (provincienaam);
  88. CREATE INDEX verblijfsobject_geopunt ON bagactueel.verblijfsobject_compleet USING GIST(geovlak);
  89. /* In een paar stappen gaan we de oppervlaktes afleiden voor de panden */
  90. CREATE TABLE bagactueel.temp_verblijfsobject_oppervlakte(
  91. gid integer,
  92. gerelateerdpand numeric(16,0),
  93. oppervlakteverblijfsobject numeric(6,0),
  94. gebruiksdoelverblijfsobject bagactueel.gebruiksdoelverblijfsobject
  95. );
  96. CREATE UNIQUE INDEX temp_verblijfsobject_dubbelingen ON bagactueel.temp_verblijfsobject_oppervlakte (gid);
  97. INSERT INTO bagactueel.temp_verblijfsobject_oppervlakte (gid, gerelateerdpand, oppervlakteverblijfsobject, gebruiksdoelverblijfsobject)
  98. SELECT gid, gerelateerdpand, oppervlakteverblijfsobject, gebruiksdoelverblijfsobject FROM bagactueel.verblijfsobject_compleet
  99. ON CONFLICT DO NOTHING;
  100. CREATE TABLE bagactueel.pand_oppervlakte(
  101. identificatie numeric(16,0),
  102. oppervlakte_totaal numeric(6,0),
  103. oppervlakte_woonfunctie numeric(6,0),
  104. oppervlakte_bijeenkomstfunctie numeric(6,0),
  105. oppervlakte_celfunctie numeric(6,0),
  106. oppervlakte_gezondheidszorgfunctie numeric(6,0),
  107. oppervlakte_industriefunctie numeric(6,0),
  108. oppervlakte_kantoorfunctie numeric(6,0),
  109. oppervlakte_logiesfunctie numeric(6,0),
  110. oppervlakte_onderwijsfunctie numeric(6,0),
  111. oppervlakte_sportfunctie numeric(6,0),
  112. oppervlakte_winkelfunctie numeric(6,0),
  113. oppervlakte_overige numeric(6,0),
  114. aantal_totaal numeric(6,0),
  115. aantal_woonfunctie numeric(6,0),
  116. aantal_bijeenkomstfunctie numeric(6,0),
  117. aantal_celfunctie numeric(6,0),
  118. aantal_gezondheidszorgfunctie numeric(6,0),
  119. aantal_industriefunctie numeric(6,0),
  120. aantal_kantoorfunctie numeric(6,0),
  121. aantal_logiesfunctie numeric(6,0),
  122. aantal_onderwijsfunctie numeric(6,0),
  123. aantal_sportfunctie numeric(6,0),
  124. aantal_winkelfunctie numeric(6,0),
  125. aantal_overige numeric(6,0)
  126. );
  127. /* INSERT THE TOTALS INTO TEMPORARY HOLDING TABLE */
  128. INSERT INTO bagactueel.pand_oppervlakte(
  129. identificatie,
  130. oppervlakte_totaal,
  131. aantal_totaal
  132. ) SELECT
  133. gerelateerdpand,
  134. SUM(oppervlakteverblijfsobject),
  135. COUNT(*)
  136. FROM
  137. bagactueel.verblijfsobject_compleet
  138. GROUP BY
  139. gerelateerdpand;
  140. INSERT INTO bagactueel.pand_oppervlakte(
  141. identificatie,
  142. oppervlakte_woonfunctie,
  143. aantal_woonfunctie
  144. ) SELECT
  145. gerelateerdpand,
  146. SUM(oppervlakteverblijfsobject),
  147. COUNT(*)
  148. FROM
  149. bagactueel.verblijfsobject_compleet
  150. WHERE
  151. gebruiksdoelverblijfsobject = 'woonfunctie'
  152. GROUP BY
  153. gerelateerdpand;
  154. INSERT INTO bagactueel.pand_oppervlakte(
  155. identificatie,
  156. oppervlakte_bijeenkomstfunctie,
  157. aantal_bijeenkomstfunctie
  158. ) SELECT
  159. gerelateerdpand,
  160. SUM(oppervlakteverblijfsobject),
  161. COUNT(*)
  162. FROM
  163. bagactueel.verblijfsobject_compleet
  164. WHERE
  165. gebruiksdoelverblijfsobject = 'bijeenkomstfunctie'
  166. GROUP BY
  167. gerelateerdpand;
  168. INSERT INTO bagactueel.pand_oppervlakte(
  169. identificatie,
  170. oppervlakte_celfunctie,
  171. aantal_celfunctie
  172. ) SELECT
  173. gerelateerdpand,
  174. SUM(oppervlakteverblijfsobject),
  175. COUNT(*)
  176. FROM
  177. bagactueel.verblijfsobject_compleet
  178. WHERE
  179. gebruiksdoelverblijfsobject = 'celfunctie'
  180. GROUP BY
  181. gerelateerdpand;
  182. INSERT INTO bagactueel.pand_oppervlakte(
  183. identificatie,
  184. oppervlakte_gezondheidszorgfunctie,
  185. aantal_gezondheidszorgfunctie
  186. ) SELECT
  187. gerelateerdpand,
  188. SUM(oppervlakteverblijfsobject),
  189. COUNT(*)
  190. FROM
  191. bagactueel.verblijfsobject_compleet
  192. WHERE
  193. gebruiksdoelverblijfsobject = 'gezondheidszorgfunctie'
  194. GROUP BY
  195. gerelateerdpand;
  196. INSERT INTO bagactueel.pand_oppervlakte(
  197. identificatie,
  198. oppervlakte_industriefunctie,
  199. aantal_industriefunctie
  200. ) SELECT
  201. gerelateerdpand,
  202. SUM(oppervlakteverblijfsobject),
  203. COUNT(*)
  204. FROM
  205. bagactueel.verblijfsobject_compleet
  206. WHERE
  207. gebruiksdoelverblijfsobject = 'industriefunctie'
  208. GROUP BY
  209. gerelateerdpand;
  210. INSERT INTO bagactueel.pand_oppervlakte(
  211. identificatie,
  212. oppervlakte_kantoorfunctie,
  213. aantal_kantoorfunctie
  214. ) SELECT
  215. gerelateerdpand,
  216. SUM(oppervlakteverblijfsobject),
  217. COUNT(*)
  218. FROM
  219. bagactueel.verblijfsobject_compleet
  220. WHERE
  221. gebruiksdoelverblijfsobject = 'kantoorfunctie'
  222. GROUP BY
  223. gerelateerdpand;
  224. INSERT INTO bagactueel.pand_oppervlakte(
  225. identificatie,
  226. oppervlakte_logiesfunctie,
  227. aantal_logiesfunctie
  228. ) SELECT
  229. gerelateerdpand,
  230. SUM(oppervlakteverblijfsobject),
  231. COUNT(*)
  232. FROM
  233. bagactueel.verblijfsobject_compleet
  234. WHERE
  235. gebruiksdoelverblijfsobject = 'logiesfunctie'
  236. GROUP BY
  237. gerelateerdpand;
  238. INSERT INTO bagactueel.pand_oppervlakte(
  239. identificatie,
  240. oppervlakte_onderwijsfunctie,
  241. aantal_onderwijsfunctie
  242. ) SELECT
  243. gerelateerdpand,
  244. SUM(oppervlakteverblijfsobject),
  245. COUNT(*)
  246. FROM
  247. bagactueel.verblijfsobject_compleet
  248. WHERE
  249. gebruiksdoelverblijfsobject = 'onderwijsfunctie'
  250. GROUP BY
  251. gerelateerdpand;
  252. INSERT INTO bagactueel.pand_oppervlakte(
  253. identificatie,
  254. oppervlakte_sportfunctie,
  255. aantal_sportfunctie
  256. ) SELECT
  257. gerelateerdpand,
  258. SUM(oppervlakteverblijfsobject),
  259. COUNT(*)
  260. FROM
  261. bagactueel.verblijfsobject_compleet
  262. WHERE
  263. gebruiksdoelverblijfsobject = 'sportfunctie'
  264. GROUP BY
  265. gerelateerdpand;
  266. INSERT INTO bagactueel.pand_oppervlakte(
  267. identificatie,
  268. oppervlakte_winkelfunctie,
  269. aantal_winkelfunctie
  270. ) SELECT
  271. gerelateerdpand,
  272. SUM(oppervlakteverblijfsobject),
  273. COUNT(*)
  274. FROM
  275. bagactueel.verblijfsobject_compleet
  276. WHERE
  277. gebruiksdoelverblijfsobject = 'winkelfunctie'
  278. GROUP BY
  279. gerelateerdpand;
  280. INSERT INTO bagactueel.pand_oppervlakte(
  281. identificatie,
  282. oppervlakte_overige,
  283. aantal_overige
  284. ) SELECT
  285. gerelateerdpand,
  286. SUM(oppervlakteverblijfsobject),
  287. COUNT(*)
  288. FROM
  289. bagactueel.verblijfsobject_compleet
  290. WHERE
  291. gebruiksdoelverblijfsobject = 'overige gebruiksfunctie'
  292. GROUP BY
  293. gerelateerdpand;
  294. CREATE INDEX pand_oppervlakte_ident ON bagactueel.pand_oppervlakte (identificatie);
  295. /* CREATE THE TABLE THAT HOLDS THE TOTALS PER PAND */
  296. CREATE MATERIALIZED VIEW bagactueel.pand_oppervlakte_sum AS
  297. SELECT identificatie,
  298. SUM(oppervlakte_totaal) oppervlakte_totaal,
  299. SUM(oppervlakte_woonfunctie) oppervlakte_woonfunctie,
  300. SUM(oppervlakte_bijeenkomstfunctie) oppervlakte_bijeenkomstfunctie,
  301. SUM(oppervlakte_celfunctie) oppervlakte_celfunctie,
  302. SUM(oppervlakte_gezondheidszorgfunctie) oppervlakte_gezondheidszorgfunctie,
  303. SUM(oppervlakte_industriefunctie) oppervlakte_industriefunctie,
  304. SUM(oppervlakte_kantoorfunctie) oppervlakte_kantoorfunctie,
  305. SUM(oppervlakte_logiesfunctie) oppervlakte_logiesfunctie,
  306. SUM(oppervlakte_onderwijsfunctie) oppervlakte_onderwijsfunctie,
  307. SUM(oppervlakte_sportfunctie) oppervlakte_sportfunctie,
  308. SUM(oppervlakte_winkelfunctie) oppervlakte_winkelfunctie,
  309. SUM(oppervlakte_overige) oppervlakte_overige,
  310. SUM(aantal_totaal) aantal_totaal,
  311. SUM(aantal_woonfunctie) aantal_woonfunctie,
  312. SUM(aantal_bijeenkomstfunctie) aantal_bijeenkomstfunctie,
  313. SUM(aantal_celfunctie) aantal_celfunctie,
  314. SUM(aantal_gezondheidszorgfunctie) aantal_gezondheidszorgfunctie,
  315. SUM(aantal_industriefunctie) aantal_industriefunctie,
  316. SUM(aantal_kantoorfunctie) aantal_kantoorfunctie,
  317. SUM(aantal_logiesfunctie) aantal_logiesfunctie,
  318. SUM(aantal_onderwijsfunctie) aantal_onderwijsfunctie,
  319. SUM(aantal_sportfunctie) aantal_sportfunctie,
  320. SUM(aantal_winkelfunctie) aantal_winkelfunctie,
  321. SUM(aantal_overige) aantal_overige
  322. FROM
  323. bagactueel.pand_oppervlakte
  324. GROUP BY identificatie;
  325. CREATE INDEX pand_oppervlakte_sum_ident ON bagactueel.pand_oppervlakte_sum (identificatie);
  326. /* Verzamel de adressen per verblijfsobject in een tabel */
  327. CREATE MATERIALIZED VIEW bagactueel.pand_adres AS
  328. SELECT V.gerelateerdpand identificatie,
  329. string_agg(CONCAT(A.openbareruimtenaam,' ',A.huisnummer,A.huisletter,A.huisnummertoevoeging,' ',A.postcode),' ') adres,
  330. MIN(A.gemeentenaam) gemeentenaam,
  331. MIN(A.woonplaatsnaam) woonplaatsnaam,
  332. MIN(A.provincienaam) provincienaam
  333. FROM bagactueel.verblijfsobject_compleet V
  334. LEFT JOIN bagactueel.adres A
  335. ON V.identificatie = A.adresseerbaarobject
  336. GROUP BY V.gerelateerdpand;
  337. CREATE INDEX pand_adres_index ON bagactueel.pand_adres (identificatie);
  338. /* Construeer de tabel pand_compleet */
  339. CREATE TABLE bagactueel.pand_compleet(
  340. gid serial,
  341. identificatie numeric(16,0),
  342. pandstatus bagactueel.pandstatus,
  343. bouwjaar numeric(4,0),
  344. geovlak geometry(PolygonZ,28992),
  345. gemeentenaam varchar(80),
  346. woonplaatsnaam varchar(80),
  347. provincienaam varchar(16),
  348. adres TEXT,
  349. OTO_oppervlakte_totaal numeric(6,0),
  350. OWO_oppervlakte_woonfunctie numeric(6,0),
  351. OBI_oppervlakte_bijeenkomstfunctie numeric(6,0),
  352. OCE_oppervlakte_celfunctie numeric(6,0),
  353. OGZ_oppervlakte_gezondheidszorgfunctie numeric(6,0),
  354. OIN_oppervlakte_industriefunctie numeric(6,0),
  355. OKA_oppervlakte_kantoorfunctie numeric(6,0),
  356. OLO_oppervlakte_logiesfunctie numeric(6,0),
  357. OOW_oppervlakte_onderwijsfunctie numeric(6,0),
  358. OSP_oppervlakte_sportfunctie numeric(6,0),
  359. OWI_oppervlakte_winkelfunctie numeric(6,0),
  360. OOV_oppervlakte_overige numeric(6,0),
  361. ATO_aantal_totaal numeric(6,0),
  362. AWO_aantal_woonfunctie numeric(6,0),
  363. ABI_aantal_bijeenkomstfunctie numeric(6,0),
  364. ACE_aantal_celfunctie numeric(6,0),
  365. AGZ_aantal_gezondheidszorgfunctie numeric(6,0),
  366. AIN_aantal_industriefunctie numeric(6,0),
  367. AKA_aantal_kantoorfunctie numeric(6,0),
  368. ALO_aantal_logiesfunctie numeric(6,0),
  369. AOW_aantal_onderwijsfunctie numeric(6,0),
  370. ASP_aantal_sportfunctie numeric(6,0),
  371. AWI_aantal_winkelfunctie numeric(6,0),
  372. AOV_aantal_overige numeric(6,0),
  373. HFO_hoofdfunctie_naar_oppervlakte varchar(30),
  374. HFA_hoofdfunctie_naar_aantal varchar(30)
  375. );
  376. INSERT INTO bagactueel.pand_compleet(
  377. identificatie,
  378. pandstatus,
  379. bouwjaar,
  380. geovlak,
  381. gemeentenaam,
  382. woonplaatsnaam,
  383. provincienaam,
  384. adres,
  385. OTO_oppervlakte_totaal,
  386. OWO_oppervlakte_woonfunctie,
  387. OBI_oppervlakte_bijeenkomstfunctie,
  388. OCE_oppervlakte_celfunctie,
  389. OGZ_oppervlakte_gezondheidszorgfunctie,
  390. OIN_oppervlakte_industriefunctie,
  391. OKA_oppervlakte_kantoorfunctie,
  392. OLO_oppervlakte_logiesfunctie,
  393. OOW_oppervlakte_onderwijsfunctie,
  394. OSP_oppervlakte_sportfunctie,
  395. OWI_oppervlakte_winkelfunctie,
  396. OOV_oppervlakte_overige,
  397. ATO_aantal_totaal,
  398. AWO_aantal_woonfunctie,
  399. ABI_aantal_bijeenkomstfunctie,
  400. ACE_aantal_celfunctie,
  401. AGZ_aantal_gezondheidszorgfunctie,
  402. AIN_aantal_industriefunctie,
  403. AKA_aantal_kantoorfunctie,
  404. ALO_aantal_logiesfunctie,
  405. AOW_aantal_onderwijsfunctie,
  406. ASP_aantal_sportfunctie,
  407. AWI_aantal_winkelfunctie,
  408. AOV_aantal_overige,
  409. HFO_hoofdfunctie_naar_oppervlakte,
  410. HFA_hoofdfunctie_naar_aantal
  411. ) SELECT
  412. P.identificatie,
  413. P.pandstatus,
  414. P.bouwjaar,
  415. P.geovlak,
  416. A.gemeentenaam,
  417. A.woonplaatsnaam,
  418. A.provincienaam,
  419. A.adres,
  420. oppervlakte_totaal,
  421. oppervlakte_woonfunctie,
  422. oppervlakte_bijeenkomstfunctie,
  423. oppervlakte_celfunctie,
  424. oppervlakte_gezondheidszorgfunctie,
  425. oppervlakte_industriefunctie,
  426. oppervlakte_kantoorfunctie,
  427. oppervlakte_logiesfunctie,
  428. oppervlakte_onderwijsfunctie,
  429. oppervlakte_sportfunctie,
  430. oppervlakte_winkelfunctie,
  431. oppervlakte_overige,
  432. aantal_totaal,
  433. aantal_woonfunctie,
  434. aantal_bijeenkomstfunctie,
  435. aantal_celfunctie,
  436. aantal_gezondheidszorgfunctie,
  437. aantal_industriefunctie,
  438. aantal_kantoorfunctie,
  439. aantal_logiesfunctie,
  440. aantal_onderwijsfunctie,
  441. aantal_sportfunctie,
  442. aantal_winkelfunctie,
  443. aantal_overige,
  444. CASE WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_woonfunctie THEN 'woonfunctie'
  445. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_bijeenkomstfunctie THEN 'bijeenkomstfunctie'
  446. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_celfunctie THEN 'celfunctie'
  447. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_gezondheidszorgfunctie THEN 'gezondheidszorgfunctie'
  448. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_industriefunctie THEN 'industriefunctie'
  449. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_kantoorfunctie THEN 'kantoorfunctie'
  450. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_logiesfunctie THEN 'logiesfunctie'
  451. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_onderwijsfunctie THEN 'onderwijsfunctie'
  452. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_sportfunctie THEN 'sportfunctie'
  453. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_winkelfunctie THEN 'winkelfunctie'
  454. WHEN GREATEST(oppervlakte_woonfunctie, oppervlakte_bijeenkomstfunctie, oppervlakte_celfunctie, oppervlakte_gezondheidszorgfunctie, oppervlakte_industriefunctie, oppervlakte_kantoorfunctie, oppervlakte_logiesfunctie, oppervlakte_onderwijsfunctie, oppervlakte_sportfunctie, oppervlakte_winkelfunctie, oppervlakte_overige) = oppervlakte_overige THEN 'overige gebruiksfunctie'
  455. ELSE NULL
  456. END,
  457. CASE WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_woonfunctie THEN 'woonfunctie'
  458. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_bijeenkomstfunctie THEN 'bijeenkomstfunctie'
  459. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_celfunctie THEN 'celfunctie'
  460. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_gezondheidszorgfunctie THEN 'gezondheidszorgfunctie'
  461. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_industriefunctie THEN 'industriefunctie'
  462. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_kantoorfunctie THEN 'kantoorfunctie'
  463. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_logiesfunctie THEN 'logiesfunctie'
  464. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_onderwijsfunctie THEN 'onderwijsfunctie'
  465. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_sportfunctie THEN 'sportfunctie'
  466. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_winkelfunctie THEN 'winkelfunctie'
  467. WHEN GREATEST(aantal_woonfunctie, aantal_bijeenkomstfunctie, aantal_celfunctie, aantal_gezondheidszorgfunctie, aantal_industriefunctie, aantal_kantoorfunctie, aantal_logiesfunctie, aantal_onderwijsfunctie, aantal_sportfunctie, aantal_winkelfunctie, aantal_overige) = aantal_overige THEN 'overige gebruiksfunctie'
  468. ELSE NULL
  469. END
  470. FROM bagactueel.pandactueelbestaand P
  471. LEFT JOIN bagactueel.pand_adres A
  472. ON P.identificatie = A.identificatie
  473. LEFT JOIN bagactueel.pand_oppervlakte_sum PO
  474. ON P.identificatie = PO.identificatie;
  475. /* Maak indexen op de pand_compleet tabel om opzoeken sneller te maken */
  476. CREATE INDEX pand_compleet_gemeentenaam ON bagactueel.pand_compleet (gemeentenaam);
  477. CREATE INDEX pand_compleet_woonplaatsnaam ON bagactueel.pand_compleet (woonplaatsnaam);
  478. CREATE INDEX pand_compleet_provincienaam ON bagactueel.pand_compleet (provincienaam);
  479. CREATE INDEX pand_compleet_geovlak ON bagactueel.pand_compleet USING GIST(geovlak);
  480. /* Maak tabel met woonplaats-geovlak en bijbehorende woonplaatsnaam, gemeentenaam en provincienaam */
  481. CREATE MATERIALIZED VIEW bagactueel.wp_gem_prov AS
  482. SELECT bagactueel.woonplaatsactueelbestaand.gid, bagactueel.provincie.provincienaam, bagactueel.gemeente.gemeentenaam, bagactueel.woonplaatsactueelbestaand.woonplaatsnaam, bagactueel.woonplaatsactueelbestaand.geovlak
  483. FROM bagactueel.provincie_gemeenteactueelbestaand
  484. JOIN bagactueel.gemeente_woonplaatsactueelbestaand
  485. ON bagactueel.provincie_gemeenteactueelbestaand.gemeentecode = bagactueel.gemeente_woonplaatsactueelbestaand.gemeentecode
  486. JOIN bagactueel.provincie ON bagactueel.provincie_gemeenteactueelbestaand.provinciecode = bagactueel.provincie.provinciecode
  487. JOIN bagactueel.gemeente ON bagactueel.provincie_gemeenteactueelbestaand.gemeentecode = bagactueel.gemeente.gemeentecode
  488. JOIN bagactueel.woonplaatsactueelbestaand ON
  489. bagactueel.gemeente_woonplaatsactueelbestaand.woonplaatscode = bagactueel.woonplaatsactueelbestaand.identificatie;
  490. CREATE INDEX wp_gem_prov_geovlak ON bagactueel.wp_gem_prov USING GIST(geovlak);
  491. /* Voeg woonplaats, gemeente en provincie toe aan alle ~3908287 ongelabelde panden */
  492. UPDATE bagactueel.pand_compleet P
  493. SET woonplaatsnaam = WGP.woonplaatsnaam,
  494. gemeentenaam = WGP.gemeentenaam,
  495. provincienaam = WGP.provincienaam
  496. FROM bagactueel.wp_gem_prov WGP
  497. WHERE ST_Intersects(WGP.geovlak, P.geovlak)
  498. AND P.woonplaatsnaam IS NULL;
  499. /* Ruim ongebruikte tabellen op */
  500. DROP MATERIALIZED VIEW bagactueel.pand_adres;
  501. DROP MATERIALIZED VIEW bagactueel.pand_oppervlakte_sum;
  502. DROP TABLE bagactueel.pand_oppervlakte;
  503. DROP TABLE bagactueel.temp_verblijfsobject_oppervlakte;