bag_create_queries.pgsql 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  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. /* In een paar stappen gaan we de oppervlaktes afleiden voor de panden */
  89. CREATE TABLE bagactueel.temp_verblijfsobject_oppervlakte(
  90. gid integer,
  91. gerelateerdpand numeric(16,0),
  92. oppervlakteverblijfsobject numeric(6,0),
  93. gebruiksdoelverblijfsobject bagactueel.gebruiksdoelverblijfsobject
  94. );
  95. CREATE UNIQUE INDEX temp_verblijfsobject_dubbelingen ON bagactueel.temp_verblijfsobject_oppervlakte (gid);
  96. INSERT INTO bagactueel.temp_verblijfsobject_oppervlakte (gid, gerelateerdpand, oppervlakteverblijfsobject, gebruiksdoelverblijfsobject)
  97. SELECT gid, gerelateerdpand, oppervlakteverblijfsobject, gebruiksdoelverblijfsobject FROM bagactueel.verblijfsobject_compleet
  98. ON CONFLICT DO NOTHING;
  99. CREATE TABLE bagactueel.pand_oppervlakte(
  100. identificatie numeric(16,0),
  101. oppervlakte_totaal numeric(6,0),
  102. oppervlakte_woonfunctie numeric(6,0),
  103. oppervlakte_bijeenkomstfunctie numeric(6,0),
  104. oppervlakte_celfunctie numeric(6,0),
  105. oppervlakte_gezondheidszorgfunctie numeric(6,0),
  106. oppervlakte_industriefunctie numeric(6,0),
  107. oppervlakte_kantoorfunctie numeric(6,0),
  108. oppervlakte_logiesfunctie numeric(6,0),
  109. oppervlakte_onderwijsfunctie numeric(6,0),
  110. oppervlakte_sportfunctie numeric(6,0),
  111. oppervlakte_winkelfunctie numeric(6,0),
  112. oppervlakte_overige numeric(6,0),
  113. aantal_totaal numeric(6,0),
  114. aantal_woonfunctie numeric(6,0),
  115. aantal_bijeenkomstfunctie numeric(6,0),
  116. aantal_celfunctie numeric(6,0),
  117. aantal_gezondheidszorgfunctie numeric(6,0),
  118. aantal_industriefunctie numeric(6,0),
  119. aantal_kantoorfunctie numeric(6,0),
  120. aantal_logiesfunctie numeric(6,0),
  121. aantal_onderwijsfunctie numeric(6,0),
  122. aantal_sportfunctie numeric(6,0),
  123. aantal_winkelfunctie numeric(6,0),
  124. aantal_overige numeric(6,0)
  125. );
  126. /* INSERT THE TOTALS INTO TEMPORARY HOLDING TABLE */
  127. INSERT INTO bagactueel.pand_oppervlakte(
  128. identificatie,
  129. oppervlakte_totaal,
  130. aantal_totaal
  131. ) SELECT
  132. gerelateerdpand,
  133. SUM(oppervlakteverblijfsobject),
  134. COUNT(*)
  135. FROM
  136. bagactueel.verblijfsobject_compleet
  137. GROUP BY
  138. gerelateerdpand;
  139. INSERT INTO bagactueel.pand_oppervlakte(
  140. identificatie,
  141. oppervlakte_woonfunctie,
  142. aantal_woonfunctie
  143. ) SELECT
  144. gerelateerdpand,
  145. SUM(oppervlakteverblijfsobject),
  146. COUNT(*)
  147. FROM
  148. bagactueel.verblijfsobject_compleet
  149. WHERE
  150. gebruiksdoelverblijfsobject = 'woonfunctie'
  151. GROUP BY
  152. gerelateerdpand;
  153. INSERT INTO bagactueel.pand_oppervlakte(
  154. identificatie,
  155. oppervlakte_bijeenkomstfunctie,
  156. aantal_bijeenkomstfunctie
  157. ) SELECT
  158. gerelateerdpand,
  159. SUM(oppervlakteverblijfsobject),
  160. COUNT(*)
  161. FROM
  162. bagactueel.verblijfsobject_compleet
  163. WHERE
  164. gebruiksdoelverblijfsobject = 'bijeenkomstfunctie'
  165. GROUP BY
  166. gerelateerdpand;
  167. INSERT INTO bagactueel.pand_oppervlakte(
  168. identificatie,
  169. oppervlakte_celfunctie,
  170. aantal_celfunctie
  171. ) SELECT
  172. gerelateerdpand,
  173. SUM(oppervlakteverblijfsobject),
  174. COUNT(*)
  175. FROM
  176. bagactueel.verblijfsobject_compleet
  177. WHERE
  178. gebruiksdoelverblijfsobject = 'celfunctie'
  179. GROUP BY
  180. gerelateerdpand;
  181. INSERT INTO bagactueel.pand_oppervlakte(
  182. identificatie,
  183. oppervlakte_gezondheidszorgfunctie,
  184. aantal_gezondheidszorgfunctie
  185. ) SELECT
  186. gerelateerdpand,
  187. SUM(oppervlakteverblijfsobject),
  188. COUNT(*)
  189. FROM
  190. bagactueel.verblijfsobject_compleet
  191. WHERE
  192. gebruiksdoelverblijfsobject = 'gezondheidszorgfunctie'
  193. GROUP BY
  194. gerelateerdpand;
  195. INSERT INTO bagactueel.pand_oppervlakte(
  196. identificatie,
  197. oppervlakte_industriefunctie,
  198. aantal_industriefunctie
  199. ) SELECT
  200. gerelateerdpand,
  201. SUM(oppervlakteverblijfsobject),
  202. COUNT(*)
  203. FROM
  204. bagactueel.verblijfsobject_compleet
  205. WHERE
  206. gebruiksdoelverblijfsobject = 'industriefunctie'
  207. GROUP BY
  208. gerelateerdpand;
  209. INSERT INTO bagactueel.pand_oppervlakte(
  210. identificatie,
  211. oppervlakte_kantoorfunctie,
  212. aantal_kantoorfunctie
  213. ) SELECT
  214. gerelateerdpand,
  215. SUM(oppervlakteverblijfsobject),
  216. COUNT(*)
  217. FROM
  218. bagactueel.verblijfsobject_compleet
  219. WHERE
  220. gebruiksdoelverblijfsobject = 'kantoorfunctie'
  221. GROUP BY
  222. gerelateerdpand;
  223. INSERT INTO bagactueel.pand_oppervlakte(
  224. identificatie,
  225. oppervlakte_logiesfunctie,
  226. aantal_logiesfunctie
  227. ) SELECT
  228. gerelateerdpand,
  229. SUM(oppervlakteverblijfsobject),
  230. COUNT(*)
  231. FROM
  232. bagactueel.verblijfsobject_compleet
  233. WHERE
  234. gebruiksdoelverblijfsobject = 'logiesfunctie'
  235. GROUP BY
  236. gerelateerdpand;
  237. INSERT INTO bagactueel.pand_oppervlakte(
  238. identificatie,
  239. oppervlakte_onderwijsfunctie,
  240. aantal_onderwijsfunctie
  241. ) SELECT
  242. gerelateerdpand,
  243. SUM(oppervlakteverblijfsobject),
  244. COUNT(*)
  245. FROM
  246. bagactueel.verblijfsobject_compleet
  247. WHERE
  248. gebruiksdoelverblijfsobject = 'onderwijsfunctie'
  249. GROUP BY
  250. gerelateerdpand;
  251. INSERT INTO bagactueel.pand_oppervlakte(
  252. identificatie,
  253. oppervlakte_sportfunctie,
  254. aantal_sportfunctie
  255. ) SELECT
  256. gerelateerdpand,
  257. SUM(oppervlakteverblijfsobject),
  258. COUNT(*)
  259. FROM
  260. bagactueel.verblijfsobject_compleet
  261. WHERE
  262. gebruiksdoelverblijfsobject = 'sportfunctie'
  263. GROUP BY
  264. gerelateerdpand;
  265. INSERT INTO bagactueel.pand_oppervlakte(
  266. identificatie,
  267. oppervlakte_winkelfunctie,
  268. aantal_winkelfunctie
  269. ) SELECT
  270. gerelateerdpand,
  271. SUM(oppervlakteverblijfsobject),
  272. COUNT(*)
  273. FROM
  274. bagactueel.verblijfsobject_compleet
  275. WHERE
  276. gebruiksdoelverblijfsobject = 'winkelfunctie'
  277. GROUP BY
  278. gerelateerdpand;
  279. INSERT INTO bagactueel.pand_oppervlakte(
  280. identificatie,
  281. oppervlakte_overige,
  282. aantal_overige
  283. ) SELECT
  284. gerelateerdpand,
  285. SUM(oppervlakteverblijfsobject),
  286. COUNT(*)
  287. FROM
  288. bagactueel.verblijfsobject_compleet
  289. WHERE
  290. gebruiksdoelverblijfsobject = 'overige gebruiksfunctie'
  291. GROUP BY
  292. gerelateerdpand;
  293. CREATE INDEX pand_oppervlakte_ident ON bagactueel.pand_oppervlakte (identificatie);
  294. /* CREATE THE TABLE THAT HOLDS THE TOTALS PER PAND */
  295. CREATE MATERIALIZED VIEW bagactueel.pand_oppervlakte_sum AS
  296. SELECT identificatie,
  297. SUM(oppervlakte_totaal) oppervlakte_totaal,
  298. SUM(oppervlakte_woonfunctie) oppervlakte_woonfunctie,
  299. SUM(oppervlakte_bijeenkomstfunctie) oppervlakte_bijeenkomstfunctie,
  300. SUM(oppervlakte_celfunctie) oppervlakte_celfunctie,
  301. SUM(oppervlakte_gezondheidszorgfunctie) oppervlakte_gezondheidszorgfunctie,
  302. SUM(oppervlakte_industriefunctie) oppervlakte_industriefunctie,
  303. SUM(oppervlakte_kantoorfunctie) oppervlakte_kantoorfunctie,
  304. SUM(oppervlakte_logiesfunctie) oppervlakte_logiesfunctie,
  305. SUM(oppervlakte_onderwijsfunctie) oppervlakte_onderwijsfunctie,
  306. SUM(oppervlakte_sportfunctie) oppervlakte_sportfunctie,
  307. SUM(oppervlakte_winkelfunctie) oppervlakte_winkelfunctie,
  308. SUM(oppervlakte_overige) oppervlakte_overige,
  309. SUM(aantal_totaal) aantal_totaal,
  310. SUM(aantal_woonfunctie) aantal_woonfunctie,
  311. SUM(aantal_bijeenkomstfunctie) aantal_bijeenkomstfunctie,
  312. SUM(aantal_celfunctie) aantal_celfunctie,
  313. SUM(aantal_gezondheidszorgfunctie) aantal_gezondheidszorgfunctie,
  314. SUM(aantal_industriefunctie) aantal_industriefunctie,
  315. SUM(aantal_kantoorfunctie) aantal_kantoorfunctie,
  316. SUM(aantal_logiesfunctie) aantal_logiesfunctie,
  317. SUM(aantal_onderwijsfunctie) aantal_onderwijsfunctie,
  318. SUM(aantal_sportfunctie) aantal_sportfunctie,
  319. SUM(aantal_winkelfunctie) aantal_winkelfunctie,
  320. SUM(aantal_overige) aantal_overige
  321. FROM
  322. bagactueel.pand_oppervlakte
  323. GROUP BY identificatie;
  324. CREATE INDEX pand_oppervlakte_sum_ident ON bagactueel.pand_oppervlakte_sum (identificatie);
  325. /* Verzamel de adressen per verblijfsobject in een tabel */
  326. CREATE MATERIALIZED VIEW bagactueel.pand_adres AS
  327. SELECT V.gerelateerdpand identificatie,
  328. string_agg(CONCAT(A.openbareruimtenaam,' ',A.huisnummer,A.huisletter,A.huisnummertoevoeging,' ',A.postcode,' ')) adres,
  329. MIN(A.gemeentenaam) gemeentenaam,
  330. MIN(A.woonplaatsnaam) woonplaatsnaam,
  331. MIN(A.provincienaam) provincienaam
  332. FROM bagactueel.verblijfsobject_compleet V
  333. LEFT JOIN bagactueel.adres A
  334. ON V.identificatie = A.adresseerbaarobject
  335. GROUP BY V.gerelateerdpand;
  336. CREATE INDEX pand_adres_index ON bagactueel.pand_adres (identificatie);
  337. /* Construeer de tabel pand_compleet */
  338. CREATE TABLE bagactueel.pand_compleet(
  339. gid serial,
  340. identificatie numeric(16,0),
  341. pandstatus bagactueel.pandstatus,
  342. bouwjaar numeric(4,0),
  343. geovlak geometry(PolygonZ,28992),
  344. gemeentenaam varchar(80),
  345. woonplaatsnaam varchar(80),
  346. provincienaam varchar(16),
  347. adres TEXT,
  348. OTO_oppervlakte_totaal numeric(6,0),
  349. OWO_oppervlakte_woonfunctie numeric(6,0),
  350. OBI_oppervlakte_bijeenkomstfunctie numeric(6,0),
  351. OCE_oppervlakte_celfunctie numeric(6,0),
  352. OGZ_oppervlakte_gezondheidszorgfunctie numeric(6,0),
  353. OIN_oppervlakte_industriefunctie numeric(6,0),
  354. OKA_oppervlakte_kantoorfunctie numeric(6,0),
  355. OLO_oppervlakte_logiesfunctie numeric(6,0),
  356. OOW_oppervlakte_onderwijsfunctie numeric(6,0),
  357. OSP_oppervlakte_sportfunctie numeric(6,0),
  358. OWI_oppervlakte_winkelfunctie numeric(6,0),
  359. OOV_oppervlakte_overige numeric(6,0),
  360. ATO_aantal_totaal numeric(6,0),
  361. AWO_aantal_woonfunctie numeric(6,0),
  362. ABI_aantal_bijeenkomstfunctie numeric(6,0),
  363. ACE_aantal_celfunctie numeric(6,0),
  364. AGZ_aantal_gezondheidszorgfunctie numeric(6,0),
  365. AIN_aantal_industriefunctie numeric(6,0),
  366. AKA_aantal_kantoorfunctie numeric(6,0),
  367. ALO_aantal_logiesfunctie numeric(6,0),
  368. AOW_aantal_onderwijsfunctie numeric(6,0),
  369. ASP_aantal_sportfunctie numeric(6,0),
  370. AWI_aantal_winkelfunctie numeric(6,0),
  371. AOV_aantal_overige numeric(6,0),
  372. HFO_hoofdfunctie_naar_oppervlakte varchar(30),
  373. HFA_hoofdfunctie_naar_aantal varchar(30)
  374. );
  375. INSERT INTO bagactueel.pand_compleet(
  376. identificatie,
  377. pandstatus,
  378. bouwjaar,
  379. geovlak,
  380. gemeentenaam,
  381. woonplaatsnaam,
  382. provincienaam,
  383. adres,
  384. OTO_oppervlakte_totaal,
  385. OWO_oppervlakte_woonfunctie,
  386. OBI_oppervlakte_bijeenkomstfunctie,
  387. OCE_oppervlakte_celfunctie,
  388. OGZ_oppervlakte_gezondheidszorgfunctie,
  389. OIN_oppervlakte_industriefunctie,
  390. OKA_oppervlakte_kantoorfunctie,
  391. OLO_oppervlakte_logiesfunctie,
  392. OOW_oppervlakte_onderwijsfunctie,
  393. OSP_oppervlakte_sportfunctie,
  394. OWI_oppervlakte_winkelfunctie,
  395. OOV_oppervlakte_overige,
  396. ATO_aantal_totaal,
  397. AWO_aantal_woonfunctie,
  398. ABI_aantal_bijeenkomstfunctie,
  399. ACE_aantal_celfunctie,
  400. AGZ_aantal_gezondheidszorgfunctie,
  401. AIN_aantal_industriefunctie,
  402. AKA_aantal_kantoorfunctie,
  403. ALO_aantal_logiesfunctie,
  404. AOW_aantal_onderwijsfunctie,
  405. ASP_aantal_sportfunctie,
  406. AWI_aantal_winkelfunctie,
  407. AOV_aantal_overige,
  408. HFO_hoofdfunctie_naar_oppervlakte,
  409. HFA_hoofdfunctie_naar_aantal
  410. ) SELECT
  411. P.identificatie,
  412. P.pandstatus,
  413. P.bouwjaar,
  414. P.geovlak,
  415. A.gemeentenaam,
  416. A.woonplaatsnaam,
  417. A.provincienaam,
  418. A.adres,
  419. oppervlakte_totaal,
  420. oppervlakte_woonfunctie,
  421. oppervlakte_bijeenkomstfunctie,
  422. oppervlakte_celfunctie,
  423. oppervlakte_gezondheidszorgfunctie,
  424. oppervlakte_industriefunctie,
  425. oppervlakte_kantoorfunctie,
  426. oppervlakte_logiesfunctie,
  427. oppervlakte_onderwijsfunctie,
  428. oppervlakte_sportfunctie,
  429. oppervlakte_winkelfunctie,
  430. oppervlakte_overige,
  431. aantal_totaal,
  432. aantal_woonfunctie,
  433. aantal_bijeenkomstfunctie,
  434. aantal_celfunctie,
  435. aantal_gezondheidszorgfunctie,
  436. aantal_industriefunctie,
  437. aantal_kantoorfunctie,
  438. aantal_logiesfunctie,
  439. aantal_onderwijsfunctie,
  440. aantal_sportfunctie,
  441. aantal_winkelfunctie,
  442. aantal_overige,
  443. 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'
  444. 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'
  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_celfunctie THEN 'celfunctie'
  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_gezondheidszorgfunctie THEN 'gezondheidszorgfunctie'
  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_industriefunctie THEN 'industriefunctie'
  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_kantoorfunctie THEN 'kantoorfunctie'
  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_logiesfunctie THEN 'logiesfunctie'
  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_onderwijsfunctie THEN 'onderwijsfunctie'
  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_sportfunctie THEN 'sportfunctie'
  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_winkelfunctie THEN 'winkelfunctie'
  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_overige THEN 'overige gebruiksfunctie'
  454. ELSE NULL
  455. END,
  456. 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'
  457. 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'
  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_celfunctie THEN 'celfunctie'
  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_gezondheidszorgfunctie THEN 'gezondheidszorgfunctie'
  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_industriefunctie THEN 'industriefunctie'
  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_kantoorfunctie THEN 'kantoorfunctie'
  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_logiesfunctie THEN 'logiesfunctie'
  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_onderwijsfunctie THEN 'onderwijsfunctie'
  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_sportfunctie THEN 'sportfunctie'
  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_winkelfunctie THEN 'winkelfunctie'
  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_overige THEN 'overige gebruiksfunctie'
  467. ELSE NULL
  468. END
  469. FROM bagactueel.pandactueelbestaand P
  470. LEFT JOIN bagactueel.pand_adres A
  471. ON P.identificatie = A.identificatie
  472. LEFT JOIN bagactueel.pand_oppervlakte_sum PO
  473. ON P.identificatie = PO.identificatie;
  474. /* Maak indexen op de pand_compleet tabel om opzoeken sneller te maken */
  475. CREATE INDEX pand_compleet_gemeentenaam ON bagactueel.pand_compleet (gemeentenaam);
  476. CREATE INDEX pand_compleet_woonplaatsnaam ON bagactueel.pand_compleet (woonplaatsnaam);
  477. CREATE INDEX pand_compleet_provincienaam ON bagactueel.pand_compleet (provincienaam);
  478. CREATE INDEX pand_compleet_geovlak ON bagactueel.pand_compleet USING GIST(geovlak);
  479. /* Maak tabel met woonplaats-geovlak en bijbehorende woonplaatsnaam, gemeentenaam en provincienaam */
  480. CREATE MATERIALIZED VIEW bagactueel.wp_gem_prov AS
  481. SELECT bagactueel.woonplaatsactueelbestaand.gid, bagactueel.provincie.provincienaam, bagactueel.gemeente.gemeentenaam, bagactueel.woonplaatsactueelbestaand.woonplaatsnaam, bagactueel.woonplaatsactueelbestaand.geovlak
  482. FROM bagactueel.provincie_gemeenteactueelbestaand
  483. JOIN bagactueel.gemeente_woonplaatsactueelbestaand
  484. ON bagactueel.provincie_gemeenteactueelbestaand.gemeentecode = bagactueel.gemeente_woonplaatsactueelbestaand.gemeentecode
  485. JOIN bagactueel.provincie ON bagactueel.provincie_gemeenteactueelbestaand.provinciecode = bagactueel.provincie.provinciecode
  486. JOIN bagactueel.gemeente ON bagactueel.provincie_gemeenteactueelbestaand.gemeentecode = bagactueel.gemeente.gemeentecode
  487. JOIN bagactueel.woonplaatsactueelbestaand ON
  488. bagactueel.gemeente_woonplaatsactueelbestaand.woonplaatscode = bagactueel.woonplaatsactueelbestaand.identificatie
  489. CREATE INDEX wp_gem_prov_geovlak ON bagactueel.wp_gem_prov USING GIST(geovlak);
  490. /* Voeg woonplaats, gemeente en provincie toe aan alle ongelabelde panden */
  491. UPDATE bagactueel.pand_compleet P
  492. SET woonplaatsnaam = WGP.woonplaatsnaam,
  493. gemeentenaam = WGP.gemeentenaam,
  494. provincienaam = WGP.provincienaam
  495. FROM bagactueel.wp_gem_prov WGP
  496. WHERE ST_Intersects(WGP.geovlak, P.geovlak)
  497. AND P.woonplaatsnaam IS NULL
  498. /* Ruim ongebruikte tabellen op */
  499. DROP VIEW bagactueel.pand_adres;
  500. DROP VIEW bagactueel.temp_verblijfsobject_oppervlakte;
  501. DROP VIEW bagactueel.pand_oppervlakte;