Postcode data van Nederland in WKT (Well Known Text) format

Ik ben op zoek naar postcode data van Nederland (PC4-format) in WKT format voor gebruik in een applicatie die alleen WKT ondersteund. Ik heb verschillende datasets gevonden, maar deze zijn niet in het gewenste format, maar zo heb ik wel dit forum gevonden. Hopelijk kan iemand hier mij mee helpen.

Welkom @fastgeojc!

We hebben geen webservices die direct WKT format kunnen produceren. De voor mij meest voor de hand liggende oplossing is om de GeoPackage te downloaden uit de ATOM service en dan met een SQL query op de GeoPackage de benodigde data te genereren. Zie hieronder een voorbeeld Bash script (benodigd hiervoor zijn de programma’s wget, sqlite3 en libspatialite-dev ):

#!/usr/bin/env bash
wget https://service.pdok.nl/cbs/pc4/atom/v1_0/downloads/cbs_pc4_2020.gpkg.zip # zie https://service.pdok.nl/cbs/pc4/atom/v1_0/cbs_pc4_2020.xml
unzip cbs_pc4_2020.gpkg.zip
sqlite3 cbs_pc4_2020.gpkg
>  select load_extension('mod_spatialite');
> .mode csv
> .output test.csv
> select postcode,ST_AsText(ST_Simplify(GeomFromGPB(geom),10)) from  cbs_pc4_2020 LIMIT 2;
> .quit

Dat levert het volgende CSV bestand op test.csv:

1184,"POLYGON((121294.892023 478995.29298, 121372.789003 478948.788616, 121429.059332 478936.241411, 121442.786583 478952.842007, 121504.12951 478961.674802, 121600.413749 479005.099134, 121604.488114 479046.855796, 121556.749083 479091.014994, 121488.688699 479124.183289, 121338.962136 479064.383471, 121294.904969 478995.401674, 121147.249231 479085.147127, 121376.099415 479475.123328, 121422.41304 479441.938245, 121462.057772 479478.607639, 121467.026234 479489.303799, 121399.379222 479513.445478, 121446.07658 479594.473451, 121592.710211 479469.068402, 121642.827442 479527.886115, 121618.75783 479557.066357, 121643.170338 479588.420175, 121678.811635 479599.386593, 121664.612157 479616.229207, 121682.217383 479644.848649, 121615.291707 479672.07172, 121600.321737 479709.968354, 121558.860898 479717.418301, 121533.794129 479743.511153, 121651.695065 479948.402046, 121646.838856 479971.110255, 121613.186786 479984.831417, 121674.687111 480167.228264, 121815.580004 480016.999514, 122021.102095 480011.259798, 122225.478064 479839.76493, 121999.53344 479582.35541, 121740.865896 479334.804586, 121717.055031 479355.136851, 121651.090635 479259.919965, 121635.382971 479142.739043, 121677.37997 479047.940422, 121707.36187 479070.686478, 121838.957114 478901.570447, 121850.917067 478846.423806, 121833.496013 478788.31885, 121766.783389 478744.905627, 121276.649687 478695.899025, 121222.900725 478665.210634, 121165.700245 478595.042692, 121141.488505 478512.330092, 121153.735983 478343.955605, 121140.689809 478283.246167, 120937.002243 478170.314984, 120887.190088 478112.766844, 120874.466652 478071.463048, 120878.507609 478033.109585, 120910.780915 477997.902518, 121049.935684 477910.083705, 121056.990486 477837.698413, 120984.25368 477773.006907, 120813.134007 477744.96475, 120766.780623 477705.238914, 120734.851846 477645.57256, 120718.383552 477525.904931, 120688.121569 477445.068219, 120340.430775 476984.035877, 120303.315343 476888.021611, 120310.193839 476804.208688, 120282.472089 476796.845147, 120269.271505 476900.258206, 120306.663788 476989.784326, 120399.010229 477127.331835, 120617.176311 477391.979755, 120677.482445 477499.756884, 120703.363522 477628.069474, 120611.639396 477669.634785, 120628.726231 477711.404736, 120438.778389 477952.766983, 120493.355085 478012.075554, 120615.60531 478064.610414, 120682.024661 478215.297752, 120765.685431 478341.137889, 120741.365823 478431.406044, 120666.98193 478501.99576, 120651.871934 478538.849271, 120970.802939 478490.599916, 120980.75907 478549.880164, 120926.216754 478537.910126, 120905.605778 478594.762462, 120761.645468 478610.343592, 120726.264875 478637.994914, 120434.676019 478680.664912, 120386.674976 478672.632837, 120333.927543 478628.473398, 120267.30136 478642.183867, 120331.577072 478811.346393, 120359.939051 478871.486418, 120409.680923 478868.900481, 120950.039299 478731.378112, 121039.735328 478888.702916, 121064.583659 478878.178247, 121103.551208 478930.206446, 121196.293106 478926.73368, 121234.148353 478977.315399, 121294.892023 478995.29298))"
1695,"MULTIPOLYGON(((135255.702421 517658.511684, 135245.742184 517652.444794, 135230.800455 517679.512383, 135250.395206 517691.192203, 135255.702421 517658.511684)), ((135272.454939 517668.715828, 135288.198946 517685.460549, 135302.478646 517687.003601, 135272.454939 517668.715828)), ((135309.250731 517687.735387, 135375.189764 517694.860703, 135352.419156 517738.366502, 135395.551489 517764.449055, 135431.32429 517711.638702, 135638.065769 517767.289231, 135664.503409 517809.032347, 135686.411235 517802.531207, 135784.658635 517832.204375, 135777.523977 517852.55658, 135791.478893 517862.216647, 135810.785561 517838.7453, 135898.156149 517861.531052, 135890.827409 517890.018408, 135956.902934 517905.236847, 136044.858765 517959.818189, 136059.577579 517949.649922, 136149.711704 518007.677697, 136196.7019 517940.939736, 136312.982559 517975.167015, 136288.769746 518023.895655, 136382.856533 518082.46813, 136437.451752 518010.96717, 136470.207643 518021.189147, 136448.175906 518059.919655, 136498.530785 518073.941818, 136566.001599 518120.407174, 136604.849249 518063.430364, 136648.705346 518074.227559, 136623.938498 518125.796885, 136630.307255 518141.255162, 136697.202127 518177.553797, 136875.986735 518220.958756, 136863.212135 518271.839368, 136886.760843 518219.13979, 136676.546813 518160.984398, 136719.354814 518089.9132, 135713.501156 517791.494577, 135694.275682 517771.926228, 135426.38098 517683.916773, 135420.019738 517667.651474, 135353.5589 517640.650868, 135303.354991 517662.872527, 135309.250731 517687.735387)), ((136856.258522 518287.400837, 136734.199166 518409.516077, 136728.428125 518421.250052, 136853.944039 518292.580411, 136856.258522 518287.400837)), ((136680.587884 518518.521282, 136655.796798 518568.927787, 136563.913226 518512.356557, 136440.451644 518713.264409, 136387.877497 518685.357228, 136289.643862 518839.152329, 136384.812273 518690.957131, 136439.010836 518716.504991, 136564.04007 518512.936822, 136656.05398 518571.392948, 136680.587884 518518.521282)), ((133947.855243 518748.512911, 133937.580984 518774.690099, 133891.092237 518746.380467, 133937.82257 518658.467639, 133947.796725 518748.353408, 133951.0719 518689.259648, 133929.66468 518633.311671, 133766.735528 518469.482073, 133703.58502 518510.531561, 133550.175746 518563.682687, 133507.182742 518558.094105, 133482.039017 518593.111782, 133451.940172 518581.361083, 133479.981404 518599.029578, 133457.672296 518632.165823, 133518.483408 518670.776061, 133541.705346 518638.358991, 133553.443833 518642.200081, 133531.580562 518685.94239, 133636.054907 518745.365794, 133639.195272 518776.344921, 133726.934344 518831.055918, 133768.387694 518825.467517, 133842.181286 518870.727431, 133870.415011 518832.203873, 133860.089756 518814.21595, 133908.813913 518842.631625, 133867.415363 518914.656356, 133832.096304 518908.856358, 133719.834151 518993.671709, 133710.279944 519066.654642, 133597.107385 519229.916345, 133565.9059 519246.781123, 133574.158502 519283.15208, 133703.335348 519389.798149, 133702.747929 519434.319237, 135343.749857 520365.953679, 135365.100596 520334.164143, 135315.874328 520301.666793, 135319.77514 520291.488655, 135486.753193 520036.394574, 135505.539692 520048.477494, 135630.75979 519855.947037, 135666.790192 519879.356804, 135758.481083 519738.913842, 135779.945679 519752.514174, 135848.968293 519639.804281, 135898.899156 519685.261512, 135995.763638 519544.349985, 136012.880163 519557.308942, 136085.503675 519446.685327, 136058.273128 519428.766013, 136135.870441 519297.416409, 136111.891246 519283.358957, 136125.134725 519251.149259, 136109.696396 519236.509834, 136115.314643 519202.759218, 136081.580718 519175.528855, 136067.054183 519185.766815, 135918.651771 519087.327022, 135887.187137 519134.140928, 135737.636194 519048.848185, 135549.117974 519344.300409, 135674.481224 519439.028143, 135657.345181 519464.293327, 135304.740863 519144.231287, 135279.811554 519181.140564, 135229.80902 519162.095015, 135110.158694 519151.655324, 134872.473367 519027.335273, 134577.360369 518940.803645, 134428.610551 518989.087052, 134379.360528 518988.57709, 134286.174004 518942.522871, 134098.030909 518804.047066, 133947.855243 518748.512911)))"

Ik heb de geometrieen versimpeld, zonder versimpeling zijn deze twee geometrieen 130 kB groot. Op deze wijze versimpelen gaat wel ten kosten van de topologie, twee aangrenzen postcodegebieden zullen niet meer precies een gedeelde grens hebben.

Hier de twee polygonen in QGIS, met behulp van de handige QuickWKT plugin

1 like

Bedankt voor je snelle reactie Anton! Als ik zo naar de output kijk, dan lijken dat niet nederlandse coördinaten. Klopt dit script dan wel?

Waar werk jij mee dan? Wat Anton laat zien, zijn RD-coordinaten. Nederlandser dan dat kan niet.

Overigens: Er word altijd over postcodegebieden gepraat, maar dat is formeel niet correct. Postcodes zijn puntenverzamelingen, geen vlakken. De postcodevlakken die je her en der kunt vinden, zijn altijd geinterpoleerd op basis van de oorspronkelijke puntenverzameling, en dus in grote mate afhankelijk van je interpolatie-algoritme. En het gebeurt (bij mij in ieder geval) dat men onjuiste conclusies trekt op basis van die vlakken (“die en die weg heeft toch die en die postcode? Hij ligt in dat postcodevlak. Nee, want er ligt geen adres aan die weg, dus heeft dat ding ook geen postcode…”).

2 likes

Wat @sbjager zegt klopt. De data in de GeoPackage is in de Amersfoort / RD New projectie, ook wel bekend onder de projectie code EPSG:28992. Je kan het envoudige in de SQL query herprojecteren naar EPSG:4326 (lat long):

select load_extension('mod_spatialite');
select InitSpatialMetadata(); 
.mode csv
.output test.csv
select postcode,ST_AsText(ST_Transform(ST_Simplify(geom,10), 4326)) from  cbs_pc4_2020 LIMIT 2;

Geeft het volgende resultaat:

1184,"POLYGON((4.893102 52.297903, 4.894248 52.29749, 4.895074 52.297381, 4.895274 52.297531, 4.896172 52.297614, 4.897579 52.29801, 4.897635 52.298385, 4.896931 52.298779, 4.89593 52.299073, 4.893741 52.298527, 4.893102 52.297904, 4.890928 52.298702, 4.894244 52.302221, 4.894927 52.301925, 4.895504 52.302257, 4.895576 52.302354, 4.894582 52.302566, 4.895258 52.303298, 4.897421 52.302179, 4.898149 52.302711, 4.897794 52.302972, 4.898149 52.303255, 4.89867 52.303356, 4.89846 52.303506, 4.898715 52.303765, 4.897732 52.304005, 4.897508 52.304345, 4.8969 52.304409, 4.89653 52.304642, 4.898238 52.306491, 4.898164 52.306695, 4.89767 52.306816, 4.898553 52.308459, 4.900634 52.307117, 4.903648 52.307078, 4.906661 52.305549, 4.903374 52.303222, 4.899606 52.300982, 4.899255 52.301163, 4.898297 52.300303, 4.898078 52.299249, 4.898703 52.2984, 4.899141 52.298606, 4.901086 52.297094, 4.901267 52.296599, 4.901017 52.296076, 4.900044 52.295682, 4.892864 52.295211, 4.892079 52.294932, 4.891248 52.294298, 4.890901 52.293553, 4.891098 52.292041, 4.890913 52.291494, 4.887939 52.290467, 4.887214 52.289946, 4.887032 52.289574, 4.887095 52.28923, 4.887572 52.288916, 4.88962 52.288135, 4.889731 52.287485, 4.888671 52.286899, 4.886166 52.286636, 4.885491 52.286276, 4.885029 52.285738, 4.8848 52.284662, 4.884365 52.283933, 4.879317 52.279768, 4.878783 52.278903, 4.878892 52.27815, 4.878487 52.278082, 4.878283 52.27901, 4.878821 52.279817, 4.88016 52.281059, 4.88333 52.283452, 4.884203 52.284424, 4.884569 52.285579, 4.883221 52.285947, 4.883467 52.286323, 4.880659 52.28848, 4.881452 52.289017, 4.883239 52.289497, 4.884197 52.290855, 4.88541 52.291991, 4.885045 52.292801, 4.883947 52.293431, 4.883722 52.293761, 4.888402 52.293347, 4.888542 52.293881, 4.887743 52.29377, 4.887436 52.294279, 4.885324 52.294411, 4.884802 52.294657, 4.880524 52.295022, 4.879821 52.294947, 4.879053 52.294547, 4.878075 52.294666, 4.878999 52.29619, 4.879409 52.296732, 4.880138 52.296712, 4.888073 52.29551, 4.889372 52.29693, 4.889737 52.296836, 4.890303 52.297306, 4.891663 52.297281, 4.892213 52.297738, 4.893102 52.297903))"
1695,"MULTIPOLYGON(((5.095475 52.646058, 5.095328 52.646003, 5.095106 52.646246, 5.095395 52.646352, 5.095475 52.646058)), ((5.095722 52.64615, 5.095954 52.646301, 5.096165 52.646316, 5.095722 52.64615)), ((5.096265 52.646323, 5.097239 52.646389, 5.0969 52.646779, 5.097535 52.647015, 5.098067 52.646542, 5.101118 52.647049, 5.101507 52.647425, 5.101831 52.647368, 5.103281 52.647638, 5.103174 52.647821, 5.10338 52.647908, 5.103666 52.647698, 5.104956 52.647905, 5.104846 52.648161, 5.105821 52.6483, 5.107118 52.648794, 5.107336 52.648703, 5.108665 52.649228, 5.109363 52.648629, 5.111079 52.648941, 5.110718 52.649378, 5.112105 52.649908, 5.112916 52.649267, 5.1134 52.64936, 5.113072 52.649707, 5.113815 52.649835, 5.11481 52.650255, 5.115387 52.649744, 5.116034 52.649843, 5.115665 52.650305, 5.115759 52.650444, 5.116745 52.650773, 5.119385 52.651169, 5.119193 52.651626, 5.119544 52.651153, 5.116441 52.650623, 5.117077 52.649986, 5.102232 52.64727, 5.101949 52.647093, 5.097996 52.646292, 5.097903 52.646146, 5.096922 52.645901, 5.096179 52.646099, 5.096265 52.646323)), ((5.119089 52.651765, 5.117279 52.652859, 5.117193 52.652964, 5.119055 52.651812, 5.119089 52.651765)), ((5.116481 52.653837, 5.116112 52.654289, 5.114757 52.653777, 5.112921 52.655579, 5.112146 52.655326, 5.110685 52.656705, 5.1121 52.655376, 5.1129 52.655608, 5.114759 52.653782, 5.116115 52.654311, 5.116481 52.653837)), ((5.076082 52.655805, 5.075929 52.65604, 5.075244 52.655783, 5.07594 52.654995, 5.076081 52.655803, 5.076134 52.655272, 5.075821 52.654769, 5.073423 52.65329, 5.072488 52.653657, 5.070217 52.654128, 5.069582 52.654076, 5.069208 52.65439, 5.068764 52.654283, 5.069178 52.654443, 5.068846 52.65474, 5.069742 52.655089, 5.070087 52.654799, 5.07026 52.654834, 5.069934 52.655226, 5.071475 52.655764, 5.071519 52.656043, 5.072812 52.656538, 5.073425 52.656489, 5.074513 52.656899, 5.074932 52.656554, 5.074781 52.656392, 5.075499 52.656649, 5.074883 52.657295, 5.074361 52.657241, 5.072697 52.657999, 5.072551 52.658655, 5.070868 52.660117, 5.070405 52.660268, 5.070525 52.660595, 5.072427 52.661558, 5.072416 52.661959, 5.096615 52.670393, 5.096933 52.670108, 5.096207 52.669814, 5.096265 52.669723, 5.098749 52.667436, 5.099026 52.667545, 5.100888 52.66582, 5.10142 52.666031, 5.102783 52.664772, 5.1031 52.664895, 5.104126 52.663885, 5.104862 52.664295, 5.106302 52.663032, 5.106554 52.663149, 5.107634 52.662158, 5.107232 52.661996, 5.108387 52.660818, 5.108033 52.660691, 5.108231 52.660402, 5.108003 52.66027, 5.108088 52.659966, 5.107591 52.659721, 5.107376 52.659812, 5.105188 52.658922, 5.10472 52.659342, 5.102515 52.65857, 5.099712 52.661219, 5.101559 52.662074, 5.101304 52.662301, 5.096111 52.659412, 5.095741 52.659743, 5.095003 52.65957, 5.093235 52.659471, 5.08973 52.658345, 5.085374 52.657557, 5.083172 52.657985, 5.082444 52.657979, 5.08107 52.657561, 5.078298 52.65631, 5.076082 52.655805)))"

Bedankt voor jullie feedback @sbjager en @antonbakker!

Met nederlandse coördinaten bedoelde ik inderdaad de positie van NL op basis van lat/lon, vandaar dat ik de initiële output niet goed kon plaatsen. Ik werk met een internationale tool, dus ik ga er vanuit dat dit niet werkt op basis van RD-coördinaten, maar dat ga ik sowieso navragen voor ik verkeerde aannames doe.

Ik ga kijken of ik met deze info eruit kom, nogmaals dank voor het delen van jullie kennis!

Nog 1 aanvullende vraag wat betreft een multipolygon, kan ik de losse onderdelen op basis van haakjes als losse polygons hanteren. De tool waarmee ik werk ondersteunt helaas geen multipolygons.

1 like

Je kan de multipolygon wel opsplitsen. Voorbeeld van Wikipedia:

Deze is eenvoudig te splitsen door de buitenste haken te laten vallen en te splitsen op de komma in het midden:
MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))
SFA MultiPolygon.svg\ 51x51
te splitsen in:
POLYGON ((30 20, 45 40, 10 40, 30 20))
en
POLYGON((15 5, 40 10, 10 20, 5 10, 15 5))

Hier heb je een inner ring in één van de twee polygons. Als je de buitenste haken laat vallen en splitst op de komma tussen de dubbele haken (deze: )),(( ), zou het ook goed moeten gaan.
MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20)))
SFA MultiPolygon with hole.svg\ 51x51
te splitsen in:
POLYGON ((40 40, 20 45, 45 30, 40 40))
en
POLYGON((20 35, 10 30, 10 10, 30 5, 45 20, 20 35),(30 20, 20 15, 20 25, 30 20))

1 like

@RobinTopper super bedankt voor deze hele heldere uitleg, hier kan ik mee aan de slag! Ik heb veel mogen leren de afgelopen dagen. Geweldig forum!

2 likes

Ik heb het script aangepast zodat er alleen losse polygonen in het CSV bestand komen. Hiervoor heb ik een extra ogr2ogr stap toegevoegd, om de MULTIPOLYGON geoms te converteren naar POLYGON en ook de geometrie te versimpelen. Door het versimpelen van geometrieen kunnen juist MULTIPOLYGON geometrieen ontstaan, vandaar dat het niet in de (Spatialite) SQL query kan plaatsvinden.

#!/usr/bin/env bash
wget https://service.pdok.nl/cbs/pc4/atom/v1_0/downloads/cbs_pc4_2020.gpkg.zip # zie https://service.pdok.nl/cbs/pc4/atom/v1_0/cbs_pc4_2020.xml
unzip cbs_pc4_2020.gpkg.zip

ogr2ogr -f GPKG cbs_pc4_2020_ex.gpkg cbs_pc4_2020.gpkg -explodecollections -unsetfid -simplify 10 -nlt POLYGON

sqlite3 cbs_pc4_2020_ex.gpkg <<< "
select load_extension('mod_spatialite');
select EnableGpkgMode();
.mode csv
.output test.csv
select postcode,ST_AsText(geom) from cbs_pc4_2020 LIMIT 2;
"

De CSV ziet er nu zo uit:

1184,"POLYGON((121294.892023 478995.29298, 121372.789003 478948.788616, 121429.059332 478936.241411, 121442.786583 478952.842007, 121504.12951 478961.674802, 121600.413749 479005.099134, 121604.488114 479046.855796, 121556.749083 479091.014994, 121488.688699 479124.183289, 121338.962136 479064.383471, 121294.904969 478995.401674, 121147.249231 479085.147127, 121376.099415 479475.123328, 121422.41304 479441.938245, 121462.057772 479478.607639, 121467.026234 479489.303799, 121399.379222 479513.445478, 121446.07658 479594.473451, 121592.710211 479469.068402, 121642.827442 479527.886115, 121618.75783 479557.066357, 121643.170338 479588.420175, 121678.811635 479599.386593, 121664.612157 479616.229207, 121682.217383 479644.848649, 121615.291707 479672.07172, 121600.321737 479709.968354, 121558.860898 479717.418301, 121533.794129 479743.511153, 121651.695065 479948.402046, 121646.838856 479971.110255, 121613.186786 479984.831417, 121674.687111 480167.228264, 121815.580004 480016.999514, 122021.102095 480011.259798, 122225.478064 479839.76493, 121999.53344 479582.35541, 121740.865896 479334.804586, 121717.055031 479355.136851, 121651.090635 479259.919965, 121635.382971 479142.739043, 121677.37997 479047.940422, 121707.36187 479070.686478, 121838.957114 478901.570447, 121850.917067 478846.423806, 121833.496013 478788.31885, 121766.783389 478744.905627, 121276.649687 478695.899025, 121222.900725 478665.210634, 121165.700245 478595.042692, 121141.488505 478512.330092, 121153.735983 478343.955605, 121140.689809 478283.246167, 120937.002243 478170.314984, 120887.190088 478112.766844, 120874.466652 478071.463048, 120878.507609 478033.109585, 120910.780915 477997.902518, 121049.935684 477910.083705, 121056.990486 477837.698413, 120984.25368 477773.006907, 120813.134007 477744.96475, 120766.780623 477705.238914, 120734.851846 477645.57256, 120718.383552 477525.904931, 120688.121569 477445.068219, 120340.430775 476984.035877, 120303.315343 476888.021611, 120310.193839 476804.208688, 120282.472089 476796.845147, 120269.271505 476900.258206, 120306.663788 476989.784326, 120399.010229 477127.331835, 120617.176311 477391.979755, 120677.482445 477499.756884, 120703.363522 477628.069474, 120611.639396 477669.634785, 120628.726231 477711.404736, 120438.778389 477952.766983, 120493.355085 478012.075554, 120615.60531 478064.610414, 120682.024661 478215.297752, 120765.685431 478341.137889, 120741.365823 478431.406044, 120666.98193 478501.99576, 120651.871934 478538.849271, 120970.802939 478490.599916, 120980.75907 478549.880164, 120926.216754 478537.910126, 120905.605778 478594.762462, 120761.645468 478610.343592, 120726.264875 478637.994914, 120434.676019 478680.664912, 120386.674976 478672.632837, 120333.927543 478628.473398, 120267.30136 478642.183867, 120331.577072 478811.346393, 120359.939051 478871.486418, 120409.680923 478868.900481, 120950.039299 478731.378112, 121039.735328 478888.702916, 121064.583659 478878.178247, 121103.551208 478930.206446, 121196.293106 478926.73368, 121234.148353 478977.315399, 121294.892023 478995.29298))"
1695,"POLYGON((136384.812273 518690.957131, 136439.010836 518716.504991, 136488.424541 518637.30669, 136564.04007 518512.936822, 136656.05398 518571.392948, 136723.271433 518426.536312, 136853.944039 518292.580411, 136860.804181 518283.61578, 136865.748176 518273.35799, 136872.962229 518248.755731, 136877.93428 518220.28694, 136886.760843 518219.13979, 136676.546813 518160.984398, 136719.354814 518089.9132, 135713.501156 517791.494577, 135694.275682 517771.926228, 135426.38098 517683.916773, 135420.019738 517667.651474, 135353.5589 517640.650868, 135303.354991 517662.872527, 135310.191193 517691.701398, 135257.093951 517651.426681, 135245.742184 517652.444794, 135230.800455 517679.512383, 135250.395206 517691.192203, 135256.756687 517652.019772, 135288.198946 517685.460549, 135335.467576 517700.169932, 135375.189764 517694.860703, 135352.419156 517738.366502, 135395.551489 517764.449055, 135431.32429 517711.638702, 135638.065769 517767.289231, 135664.503409 517809.032347, 135686.411235 517802.531207, 135784.658635 517832.204375, 135777.523977 517852.55658, 135791.478893 517862.216647, 135810.785561 517838.7453, 135898.156149 517861.531052, 135890.827409 517890.018408, 135956.902934 517905.236847, 136044.858765 517959.818189, 136059.577579 517949.649922, 136149.711704 518007.677697, 136196.7019 517940.939736, 136312.982559 517975.167015, 136288.769746 518023.895655, 136382.856533 518082.46813, 136437.451752 518010.96717, 136470.207643 518021.189147, 136448.175906 518059.919655, 136498.530785 518073.941818, 136566.001599 518120.407174, 136604.849249 518063.430364, 136648.705346 518074.227559, 136623.938498 518125.796885, 136630.307255 518141.255162, 136697.202127 518177.553797, 136875.986735 518220.958756, 136860.327076 518283.330421, 136734.199166 518409.516077, 136723.495227 518425.542092, 136715.343955 518439.346308, 136696.105384 518475.839537, 136655.796798 518568.927787, 136563.913226 518512.356557, 136440.451644 518713.264409, 136387.877497 518685.357228, 136289.643862 518839.152329, 136384.812273 518690.957131))"


De SQL query is overigens ook vanuit QGIS uit te voeren. In het Browser panel rechtermuisklik op de GeoPackage en kies dan Execute SQL… .

image

Vervolgens SQL query in input veld invoeren op Execute klikken en dan op Load layer klikken:

Vervolgens rechtermuisklik op de laag en dan Export > Save Features As…, om de laag (met enkel WKT geometrieen) op te slaan als CSV:


1 like

Wederom enorm bedankt @antonbakker!

Het proces binnen QGIS (wat voor mij een compleet nieuw programma is) middels SQL (zeer basale kennis) heb ik succesvol doorlopen.
De query heb ik aangepast om van RK-coördinaten naar lon/lat te gaan door ST_Simplify(geom,10), 4326)) toe te voegen, omdat het me niet lukt om die extra ogr2ogr stap uit te voeren binnen QGIS.

Waar kan ik dat eenvoudig omzetten? Of als je de file kan delen na de ogr2ogr dan moet ik er verder zelf wel uit zien te komen na al jullie hulp :slight_smile:

1 like

Hoi @fastgeojc,

Bij deze een volledig QGIS gebaseerde oplossing, waarmee je ook de conversie stap kan uitvoeren.

QGIS heeft de volgende tool in de Processing Toolbox: GDAL > Vector conversion > Convert format, waarmee je die conversie stap kan uitvoeren.

Ik heb een QGIS processing model gemaakt, die van deze tool gebruik maakt om de WKT CSV te generen. Het model voert de volgende stappen uit:

  • simplificeren (tolerantie 10 meter) en split multipart naar singlepart: Convert format
  • genereren van wkt in SQL query met herprojectie naar EPSG:4326: Execute SQL

Deze kan je toevoegen aan je Processing Toolbox via Add Model to Toolbox (browse in je verkenner naar het gedownloade .model3 bestand):

Screenshot from 2023-01-31 10-04-25

Waarna deze beschikbaar is in je toolbox:

Screenshot from 2023-01-31 10-04-45

En vervolgens uitvoeren met:

Wat het CSV bestand oplevert:

postcode,wkt_geom
"1184","POLYGON((4.893102 52.297903, 4.894248 52.29749, 4.895074 52.297381, 4.895274 52.297531, 4.896172 52.297614, 4.897579 52.29801, 4.897635 52.298385, 4.896931 52.298779, 4.89593 52.299073, 4.893741 52.298527, 4.893102 52.297904, 4.890928 52.298702, 4.894244 52.302221, 4.894927 52.301925, 4.895504 52.302257, 4.895576 52.302354, 4.894582 52.302566, 4.895258 52.303298, 4.897421 52.302179, 4.898149 52.302711, 4.897794 52.302972, 4.898149 52.303255, 4.89867 52.303356, 4.89846 52.303506, 4.898715 52.303765, 4.897732 52.304005, 4.897508 52.304345, 4.8969 52.304409, 4.89653 52.304642, 4.898238 52.306491, 4.898164 52.306695, 4.89767 52.306816, 4.898553 52.308459, 4.900634 52.307117, 4.903648 52.307078, 4.906661 52.305549, 4.903374 52.303222, 4.899606 52.300982, 4.899255 52.301163, 4.898297 52.300303, 4.898078 52.299249, 4.898703 52.2984, 4.899141 52.298606, 4.901086 52.297094, 4.901267 52.296599, 4.901017 52.296076, 4.900044 52.295682, 4.892864 52.295211, 4.892079 52.294932, 4.891248 52.294298, 4.890901 52.293553, 4.891098 52.292041, 4.890913 52.291494, 4.887939 52.290467, 4.887214 52.289946, 4.887032 52.289574, 4.887095 52.28923, 4.887572 52.288916, 4.88962 52.288135, 4.889731 52.287485, 4.888671 52.286899, 4.886166 52.286636, 4.885491 52.286276, 4.885029 52.285738, 4.8848 52.284662, 4.884365 52.283933, 4.879317 52.279768, 4.878783 52.278903, 4.878892 52.27815, 4.878487 52.278082, 4.878283 52.27901, 4.878821 52.279817, 4.88016 52.281059, 4.88333 52.283452, 4.884203 52.284424, 4.884569 52.285579, 4.883221 52.285947, 4.883467 52.286323, 4.880659 52.28848, 4.881452 52.289017, 4.883239 52.289497, 4.884197 52.290855, 4.88541 52.291991, 4.885045 52.292801, 4.883947 52.293431, 4.883722 52.293761, 4.888402 52.293347, 4.888542 52.293881, 4.887743 52.29377, 4.887436 52.294279, 4.885324 52.294411, 4.884802 52.294657, 4.880524 52.295022, 4.879821 52.294947, 4.879053 52.294547, 4.878075 52.294666, 4.878999 52.29619, 4.879409 52.296732, 4.880138 52.296712, 4.888073 52.29551, 4.889372 52.29693, 4.889737 52.296836, 4.890303 52.297306, 4.891663 52.297281, 4.892213 52.297738, 4.893102 52.297903))"
...
3 likes

Anton, je bent een held!

Ontzettend bedankt voor alle hulp, niet alleen voor de uiteindelijke output, maar ook voor alle nieuwe kennis die ik heb mogen vergaren in dit proces! Echt top!

1 like

Omdat de schoonheid van GDAL & OGR niet voldoende bezongen kan worden de hele download- én conversieketen met één enkel commando:
ogr2ogr pc4_latlon.csv /vsizip/vsicurl/https://service.pdok.nl/cbs/pc4/atom/v1_0/downloads/cbs_pc4_2020.gpkg.zip/cbs_pc4_2020.gpkg -lco GEOMETRY=AS_WKT -nlt POLYGON -t_srs EPSG:4326

5 likes

Terecht dat je het nog eens aanstipt en wist niet dat je met -lco GEOMETRY=AS_WKT WKT output kan genereren, weer wat geleerd!

Het commando is nog niet helemaal volledig omdat de multipolygonen niet worden uitgesplitist. ogr2ogr pakt denk ik alleen de eerste polygon uit elke multipolygon. Met de toevoeging -explodeCollections worden multipolygonen uitgegesplitst tot individuele polygonen.

ogr2ogr pc4_latlon-explode.csv /vsizip/vsicurl/https://service.pdok.nl/cbs/pc4/atom/v1_0/downloads/cbs_pc4_2020.gpkg.zip/cbs_pc4_2020.gpkg -lco GEOMETRY=AS_WKT -nlt POLYGON -t_srs EPSG:4326 -explodeCollections

Zie nl het verschil in aantal polygonen/regels tussen de twee csv bestanden:

4069 pc4_latlon.csv
5077 pc4_latlon-explode.csv
1 like

Hoi Anton,

Daar ben ik toch weer :slight_smile: Hopelijk kan ik nogmaals van je kennis gebruik maken.

Ik merk dat er toch nog een soort van multi-polygonen ontstaan met het huidige model.
Een goed voorbeeld is postcode 1012.

POLYGON((4.903258 52.380773, 4.906404 52.38004, 4.904221 52.37787, 4.904484 52.377774, 4.904345 52.377521, 4.903405 52.376532, 4.902268 52.37614, 4.901258 52.374166, 4.901534 52.373955, 4.901249 52.373398, 4.90093 52.373493, 4.900704 52.37302, 4.900953 52.372943, 4.900427 52.372119, 4.899851 52.372221, 4.89636 52.368496, 4.896537 52.368318, 4.895916 52.367375, 4.895263 52.367366, 4.895759 52.367003, 4.893942 52.367138, 4.893147 52.366906, 4.891738 52.366914, 4.889635 52.367284, 4.887822 52.368802, 4.8881 52.3702, 4.887805 52.370265, 4.888175 52.372203, 4.888477 52.372191, 4.888816 52.373145, 4.888847 52.373255, 4.888503 52.373275, 4.888985 52.374559, 4.889402 52.374562, 4.891263 52.376277, 4.89096 52.376349, 4.89105 52.37643, 4.891309 52.376323, 4.895084 52.37955, 4.894878 52.379698, 4.895907 52.38071, 4.896243 52.380619, 4.898767 52.382969, 4.901179 52.381562, 4.903258 52.380773), (4.889781 52.372962, 4.890138 52.372946, 4.890387 52.373183, 4.889644 52.37322, 4.889601 52.372987, 4.889781 52.372962))

Bijna helemaal op het einde zie je daar het volgende terugkomen:

52.381562, 4.903258 52.380773), (4.889781 52.372962, 4.890138 52.372946, 4.890387 52.373183, 4.889644 52.37322, 4.889601 52.372987, 4.889781 52.372962))

Je ziet dat er toch een nieuwe Polygoon wordt gestart. Dit geldt voor een redelijk groot aantal andere postcodes, bijvoorbeeld 1013, 1046, 1060, 1061, enz.
In eerste instantie dacht ik dat deze polygonen te lang waren voor het systeem waar ik mee werk, maar zelfs met simplify 1000 (uit wanhoop gekozen haha) bleef ik tegen het probleem aanlopen dat het niet geaccepteerd werd en toen spotte ik dit.

Dit lijken polygons te zijn met een (kleine) opening. Heb je enig idee hoe dit kan? Zie je mogelijkheden voor een workaround?

Dat is de schrijfwijze binnen WKT.

image

Voor meer informatie:

Ha @fastgeojc, als je de QuickWKT QGIS plugin installeert en de polygonen inlaadt zal je zien dat het polygonen zijn met een gat erin. Dit zijn dus wel enkelvoudige polygonen (zoals @Anton hierboven ook al aangeeft):

Je kan de gaten in de polygonen opvullen met de Delete Holes tool volgens gis.stackexchange (niet zelf getest). Ws kan je die stap ook toevoegen aan het processing model, zodat de output enkel polygonen zonder gaten bevat.

1 like

Dit topic is 180 dagen na het laatste antwoord automatisch gesloten. Nieuwe antwoorden zijn niet meer toegestaan.