<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.8.5">Jekyll</generator><link href="http://friesewoudloper.nl/feed.xml" rel="self" type="application/atom+xml" /><link href="http://friesewoudloper.nl/" rel="alternate" type="text/html" /><updated>2020-04-07T05:59:31+00:00</updated><id>http://friesewoudloper.nl/feed.xml</id><title type="html">De Friese Woudloper - blog van Willy Tadema</title><subtitle></subtitle><entry><title type="html">Lokale kopie van WMTS tiles</title><link href="http://friesewoudloper.nl/2020/04/06/Lokale-kopie-van-WMTS-tiles.html" rel="alternate" type="text/html" title="Lokale kopie van WMTS tiles" /><published>2020-04-06T00:00:00+00:00</published><updated>2020-04-06T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2020/04/06/Lokale%20kopie%20van%20WMTS%20tiles</id><content type="html" xml:base="http://friesewoudloper.nl/2020/04/06/Lokale-kopie-van-WMTS-tiles.html">&lt;p&gt;Als je gegevens op een kaart in een web applicatie toont, is het ter referentie vaak handig om een topografische ondergrond toe te voegen. Hiervoor kun je bijvoorbeeld de BRT Achtergrondkaart van PDOK gebruiken. De BRT Achtergrond kaart is online te op te vragen via een Web Map Tile Service (WMTS).&lt;/p&gt;

&lt;p&gt;Maar wat moet je doen als de web applicatie - bijvoorbeeld om security redenen - geen toegang tot het internet heeft? Daar liep ik tegenaan bij het maken van een &lt;a href=&quot;https://shiny.rstudio.com/&quot;&gt;Shiny app&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dan maak je een lokale kopie. Daarvoor kun je &lt;a href=&quot;https://mobac.sourceforge.io/&quot;&gt;Mobile Atlas Creator (MOBAC)&lt;/a&gt; gebruiken.&lt;/p&gt;

&lt;p&gt;Het is eenvoudig om MOBAC te installeren en te gebruiken. In het README bestand van de applicatie is duidelijk beschreven hoe dat moet.&lt;/p&gt;

&lt;p&gt;Belangrijk is om &lt;em&gt;Osmdroid ZIP&lt;/em&gt; als formaat te kiezen. Voor het downloaden van BRT Achtergrondkaart moet je bovendien een &lt;em&gt;custom map source&lt;/em&gt; definiëren. Dat is niet moeilijk. Maak een XML bestand met de volgende inhoud aan en plaats het in de map &lt;em&gt;mapsources&lt;/em&gt;.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;customMapSource&amp;gt;
	&amp;lt;name&amp;gt;BRT standaard&amp;lt;/name&amp;gt;
	&amp;lt;minZoom&amp;gt;5&amp;lt;/minZoom&amp;gt;
	&amp;lt;maxZoom&amp;gt;18&amp;lt;/maxZoom&amp;gt;
	&amp;lt;tileType&amp;gt;png&amp;lt;/tileType&amp;gt;
	&amp;lt;tileUpdate&amp;gt;None&amp;lt;/tileUpdate&amp;gt;
	&amp;lt;url&amp;gt;http://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaart/EPSG:3857/{$z}/{$x}/{$y}.png&amp;lt;/url&amp;gt;
	&amp;lt;backgroundColor&amp;gt;#000000&amp;lt;/backgroundColor&amp;gt;
&amp;lt;/customMapSource&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Na een herstart van MOBAC is &lt;em&gt;BRT standaard&lt;/em&gt; toegevoegd als bron. Fluitje van een cent!&lt;/p&gt;

&lt;p&gt;Waar je wel op moet letten, is de &lt;em&gt;fair use policy&lt;/em&gt; van PDOK. Het is niet netjes om tienduizenden requests af te vuren op de server. Beperk daarom het geselecteerde gebied en/of de zoomniveaus.&lt;/p&gt;

&lt;p&gt;Om de BRT Achtergrondkaart te gebruiken in een Shiny app, moet je het ZIP bestand uitpakken en de inhoud naar de map &lt;em&gt;www/map/tiles&lt;/em&gt; in de root van het Shiny project verplaatsen. In &lt;a href=&quot;https://github.com/FrieseWoudloper/demo_offline_tiles&quot;&gt;deze Github repository&lt;/a&gt; vind je de code van mijn demo-app.&lt;/p&gt;</content><author><name></name></author><summary type="html">Als je gegevens op een kaart in een web applicatie toont, is het ter referentie vaak handig om een topografische ondergrond toe te voegen. Hiervoor kun je bijvoorbeeld de BRT Achtergrondkaart van PDOK gebruiken. De BRT Achtergrond kaart is online te op te vragen via een Web Map Tile Service (WMTS).</summary></entry><entry><title type="html">Kaart in Power BI met R en Leaflet</title><link href="http://friesewoudloper.nl/2019/12/29/Kaart-in-Power-BI-met-R-en-Leaflet.html" rel="alternate" type="text/html" title="Kaart in Power BI met R en Leaflet" /><published>2019-12-29T00:00:00+00:00</published><updated>2019-12-29T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/12/29/Kaart-in-Power-BI-met-R-en-Leaflet</id><content type="html" xml:base="http://friesewoudloper.nl/2019/12/29/Kaart-in-Power-BI-met-R-en-Leaflet.html">&lt;p&gt;In vorige blog posts heb ik laten zien hoe je met de &lt;a href=&quot;http://www.friesewoudloper.nl/2019/12/01/CBS-gebieden-in-Power-BI.html&quot;&gt;Shape-kaart&lt;/a&gt; en &lt;a href=&quot;http://www.friesewoudloper.nl/2019/12/07/CBS-buurten-visualiseren-met-Mapbox-en-Power-BI.html&quot;&gt;Mapbox visuals&lt;/a&gt; een kaart kunt maken in Power BI. De functionaliteit van zo’n kaart is beperkt. Het is bijvoorbeeld niet mogelijk om meerdere thematische lagen toe te voegen die je onafhankelijk van elkaar kunt aan- of uitzetten. Het is ook niet mogelijk om de BRT Achtergrondkaart als topografische ondergrond te gebruiken. De &lt;a href=&quot;https://www.pdok.nl/introductie/-/article/basisregistratie-topografie-achtergrondkaarten-brt-a-&quot;&gt;BRT Achtergrondkaart&lt;/a&gt; is de officiële topografische kaart van de overheid. Meer weten over de BRT Achtergrondkaart? Lees dan &lt;a href=&quot;http://www.friesewoudloper.nl/2019/11/09/BRT-als-alternatief-voor-Google-Maps.html&quot;&gt;deze post&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Er zijn open source projecten die deze functionaliteit wél bieden, bijvoorbeeld &lt;a href=&quot;http://leaflet.org/&quot;&gt;Leaflet&lt;/a&gt;. Leaflet is een JavaScript library. Met deze library kunnen ontwikkelaars een kaart-viewer toevoegen aan een website of app. Maar daarvoor moet je wel kunnen programmeren in JavaScript.&lt;/p&gt;

&lt;p&gt;R maakt het voor data-analisten een stuk makkelijker. Met het &lt;a href=&quot;https://cran.r-project.org/web/packages/leaflet/index.html&quot;&gt;leaflet package&lt;/a&gt; kun je vanuit R namelijk automatisch de benodigde JavaScript code automatisch genereren. Hoe dat moet, vertel ik je in deze blog post. Zet je schrap, want het is niet eenvoudig.&lt;/p&gt;

&lt;h2 id=&quot;installeer-r&quot;&gt;Installeer R&lt;/h2&gt;
&lt;p&gt;Zorg er voor dat je &lt;a href=&quot;https://www.r-project.org/&quot;&gt;R&lt;/a&gt; en eventueel ook &lt;a href=&quot;https://rstudio.com/products/rstudio/&quot;&gt;RStudio&lt;/a&gt; geïnstalleerd hebt. RStudio is een &lt;a href=&quot;https://nl.wikipedia.org/wiki/Integrated_development_environment&quot;&gt;IDE&lt;/a&gt; of ontwikkelomgeving voor R. Open de R console of RStudio. Installeer leaflet en de andere R packages die nodig zijn met het volgende commando:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;install.packages(c(&quot;leaflet&quot;, &quot;jsonlite&quot;, &quot;XML&quot;, &quot;htmlwidgets&quot;))  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga in Power BI naar &lt;em&gt;Bestand&lt;/em&gt; → &lt;em&gt;Opties en instellingen&lt;/em&gt; → &lt;em&gt;Opties&lt;/em&gt; → &lt;em&gt;GLOBAAL&lt;/em&gt; → &lt;em&gt;R-script&lt;/em&gt;. Zorg er voor dat de verwijzing naar de installatielocatie van R klopt. Doe dit eventueel ook voor RStudio.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;installeer-nodejs&quot;&gt;Installeer Node.js&lt;/h2&gt;
&lt;p&gt;Installeer vervolgens &lt;a href=&quot;https://nodejs.org/en/&quot;&gt;Node.js&lt;/a&gt;. Op de Node.js command prompt en installeer de benodigde packages via het commando:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;npm install -g powerbi-visuals-tools
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Check of de installatie goed is verlopen door het volgende commando uit te voeren:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pbiviz 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Als alles goed is, ziet de uitvoer er als volgt uit:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;maak-een-custom-visual-aan&quot;&gt;Maak een custom visual aan&lt;/h2&gt;
&lt;p&gt;Maak nu vanaf de Node.js commando prompt een nieuwe custom visual voor Power BI aan met behulp van het &lt;a href=&quot;https://github.com/microsoft/PowerBI-visuals/blob/master/RVisualTutorial/CreateRHTML.md&quot;&gt;rhtml template&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pbiviz new demo -t rhtml
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img05.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Node.js heeft op basis van het template een nieuwe directory aangemaakt. De directory bevat bestanden en sub directories.&lt;/p&gt;

&lt;p&gt;Open het bestand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.\src\visual.ts&lt;/code&gt; in een teksteditor. Vervang alle voorkomens van &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NodeListOf&lt;/code&gt; door &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTMLCollectionOf&lt;/code&gt; en sla het bestand op.&lt;/p&gt;

&lt;p&gt;Open daarna het bestand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pbiviz.json&lt;/code&gt;. Vul een waarde in voor &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;description&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;supportUrl&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;email&lt;/code&gt;. Sla het bestand op.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img06.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In de documentatie heb ik het nergens gelezen, maar ik ga er vanuit dat het bestand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dependencies.json&lt;/code&gt; ook gewijzigd moet worden. Hierin staan volgens mij de R packages die nodig zijn. In het voorbeeld maken we geen gebruik van &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ggplot2&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;plotly&lt;/code&gt;, maar wel van &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;leaflet&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jsonlite&lt;/code&gt;. Pas het bestand hierop aan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img14.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Je vraagt je ondertussen misschien af waarom ik mijn eigen custom visual bouw en geen gebruik maak van de R-visual in het venster &lt;em&gt;Visualisatie&lt;/em&gt; (zie onderstaande schermafdruk). De reden is dat de laatste alleen overweg kan met statische afbeeldingen als output, en niet met HTML en JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;pas-het-r-script-aan&quot;&gt;Pas het R-script aan&lt;/h2&gt;
&lt;p&gt;Pas de code in het bestand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.\script.r&lt;/code&gt; aan. Dit kun je doen in RStudio, maar het kan ook gewoon in een teksteditor.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;source('./r_files/flatten_HTML.r')

############### Library Declarations ###############
libraryRequireInstall(&quot;leaflet&quot;);
libraryRequireInstall(&quot;jsonlite&quot;);
####################################################

################### Actual code ####################
brtAchtergrondkaart &amp;lt;- paste0(&quot;http://geodata.nationaalgeoregister.nl/&quot;,
                              &quot;tiles/service/wmts/brtachtergrondkaart/&quot;,
                              &quot;EPSG:3857/{z}/{x}/{y}.png&quot;);
veld &amp;lt;- paste0(&quot;https://gist.githubusercontent.com/FrieseWoudloper/&quot;,
               &quot;fcf4546a064ac7c12198119086601eca/raw/&quot;,
               &quot;37c4511d6a48cc1acee54818322278a55e26052b/&quot;,
               &quot;groningen-veld.json&quot;);
map &amp;lt;- leaflet(data = Values);
map &amp;lt;- addTiles(map, 
                urlTemplate = brtAchtergrondkaart, 
                attribution = &quot;Kaartgegevens &amp;amp;copy; Kadaster&quot;, 
                options = tileOptions(minZoom = 6, maxZoom = 18));		
map &amp;lt;- addTopoJSON(map, 
                   topojson = read_json(veld), 
                   weight = 1, color = &quot;grey&quot;, 
                   fillOpacity = 0.3, 
                   group = 'Groningen veld');
map &amp;lt;- addCircles(map, 
                  lng = ~ longitude, 
                  lat = ~ latitude, 
                  popup = ~ paste(&quot;Locatie:&quot;, 
                  locatie, &quot;&amp;lt;br&amp;gt;&quot;, &quot;Magnitude:&quot;, 
                  magnitude));	
map &amp;lt;- addLayersControl(map, 
                        overlayGroups = c(&quot;Groningen veld&quot;),
                        options = layersControlOptions(collapsed = FALSE));
map &amp;lt;- hideGroup(map, &quot;Groningen veld&quot;);
map &amp;lt;- fitBounds(map, 
                 lng1 = max(Values$longitude), lat1 = max(Values$latitude),
                 lng2 = min(Values$longitude), lat2 = min(Values$latitude));
####################################################

############# Create and save widget ###############
internalSaveWidget(map, 'out.html');
####################################################
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;De R code genereert een Leaflet kaart met bevingen met als topografische ondergrond de BRT Achtergrondkaart. De kaart bevat ook een laag met het Groninger veld. Deze laag staat standaard uit, maar kan door de gebruiker aangezet worden. De geometrie van het Groninger veld wordt geïmporteerd vanuit een &lt;a href=&quot;https://nl.wikipedia.org/wiki/TopoJSON&quot;&gt;TopoJSON&lt;/a&gt; bestand.&lt;/p&gt;

&lt;h2 id=&quot;maak-een-package-voor-de-custom-visual&quot;&gt;Maak een package voor de custom visual&lt;/h2&gt;
&lt;p&gt;Ga terug naar de Node.js commando prompt en verander met het &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cd&lt;/code&gt; commando de werkdirectory naar de map met de custom visual.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;cd demo
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Compileer het package.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pbiviz package
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Als het compileren succesvol is verlopen, staat het package nu klaar in de subdirectory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.\dist&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img12.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;laad-de-custom-visual-in-power-bi&quot;&gt;Laad de custom visual in Power BI&lt;/h2&gt;
&lt;p&gt;Start Power BI Desktop. Check de landinstellingen voor importeren via &lt;em&gt;Bestand&lt;/em&gt; → &lt;em&gt;Options and settings&lt;/em&gt; → &lt;em&gt;Options&lt;/em&gt; → &lt;em&gt;CURRENT FILE&lt;/em&gt; → &lt;em&gt;Regional Settings&lt;/em&gt;. De juiste instelling is &lt;em&gt;English (United States)&lt;/em&gt; anders staat het decimaal scheidingsteken voor de coördinaten straks op de verkeerde plek.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img07.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Importeer het &lt;a href=&quot;https://gist.githubusercontent.com/FrieseWoudloper/fcf4546a064ac7c12198119086601eca/raw/37c4511d6a48cc1acee54818322278a55e26052b/bevingen.csv&quot;&gt;CSV-bestand met bevingen&lt;/a&gt;.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Voeg een tabel toe aan het rapport met het veld &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locatie&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ga naar het deelvenster &lt;em&gt;Visualisaties&lt;/em&gt;. Klik op de optie &lt;em&gt;Een aangepast visueel element importeren&lt;/em&gt;. Dat is het pictogram met de drie puntjes. Selecteer &lt;em&gt;Importeren vanuit bestand&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img08.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Importeer het package met de custom visual. Dat is het bestand met de extensie &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pbiviz&lt;/code&gt; in de subdirectory &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.\dist&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;De custom visual is nu toegevoegd aan het deelvenster &lt;em&gt;Visualisaties&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img09.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voeg de custom visual toe aan het rapport. Klik op &lt;em&gt;Inschakelen&lt;/em&gt; wanneer je melding krijgt over inschakelen van visuele scriptelementen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img10.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voeg de waarden &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;latitude&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locatie&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;longitude&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;magnitude&lt;/code&gt; toe aan de custom visual. Het duurt even, maar dan krijg je een bevingenkaart te zien.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img11.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Via de toggle knop rechtsboven kun je de laag met het Groningen veld aanzetten.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img13.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Wanneer je op een plaatsnaam klikt in de tabel, zoomt de kaart in op de betreffende locatie. Voor meer interactiviteit kun je bijvoorbeeld een staafdiagram met de frequentie per magnitude toevoegen. Als je dan op een staaf klikt, wordt de kaart automatisch aangepast zodat die alleen bevingen toont van de bijbehorende magnitude.&lt;/p&gt;

&lt;p&gt;De code van de demo kun je &lt;a href=&quot;https://github.com/FrieseWoudloper/power-bi-r-leaflet-demo&quot;&gt;hier downloaden&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;bevindingen&quot;&gt;Bevindingen&lt;/h2&gt;

&lt;p&gt;Het werkt, maar het is niet bepaald lean-and-mean. R wordt in dit geval alleen gebruikt voor het genereren van de JavaScript code. R voegt verder niets toe, alleen complexiteit.&lt;/p&gt;

&lt;p&gt;Een ander probleem is dat iedere keer wanneer de gebruiker een andere dataselectie maakt, de kaart helemaal opnieuw gerenderd wordt. Het duurt dan even voordat de kaart is aangepast. Dat is irritant.&lt;/p&gt;

&lt;p&gt;De interactiviteit werkt ook maar één kant op. Het is niet mogelijk om een dataselectie te maken in de kaart die doorwerkt in het hele rapport. Wanneer je op een beving in de kaart klikt, verschijnt er een tooltip, maar de andere visuele elementen in het rapport reageren er niet op.&lt;/p&gt;

&lt;p&gt;Het is ook niet gelukt om het rapport met de Leaflet kaart te delen via de &lt;a href=&quot;https://app.powerbi.com&quot;&gt;Power BI-service&lt;/a&gt;. Ik krijg een runtimefout. Het lijkt er op dat de Power BI-service niet kan verbinden met PDOK en/of GitHub voor het ophalen van respectievelijk de BRT Achtergrondkaart en het TopoJSON bestand met het Groningen veld.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-29/img15.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Kortom:    &lt;br /&gt;
Met Leaflet kun je een rijke, interactieve kaart maken in Power BI. Het lijkt echter een beter idee om een custom visual te ontwikkelen die rechtstreeks gebruikt maakt van de Leaflet JavaScript library, zonder tussenkomst van R. Daar zijn op GitHub en in de Marketplace ook wel voorbeelden van, bijvoorbeeld &lt;a href=&quot;https://appsource.microsoft.com/en-us/product/power-bi-visuals/WA104381497?tab=Overview&quot;&gt;Icon Map&lt;/a&gt;, alleen bieden die niet dezelfde functionaliteit als die ik in deze post heb gedemonstreerd.&lt;/p&gt;

&lt;h2 id=&quot;bronnen&quot;&gt;Bronnen&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://towardsdatascience.com/custom-html-visuals-in-power-bi-using-r-2b0494894ff&quot;&gt;How to generate custom visuals in Power BI using R&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/PowerBI-visuals&quot;&gt;Documentation for creating visuals for Power BI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/power-bi/desktop-r-powered-custom-visuals&quot;&gt;Use R-powered Power BI visuals in Power BI&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/en-us/power-bi/developer/visuals/custom-visual-develop-tutorial&quot;&gt;Tutorial: Developing a Power BI visual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://microsoft.github.io/PowerBI-visuals/docs/how-to-guide/performance-tips/&quot;&gt;How to build a high performance Custom Visual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/avinmathew/power-bi-leaflet-custom-visual&quot;&gt;Power BI Leaflet Custom Visual&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/woodbuffalo/powerbi-leaflet&quot;&gt;Leaflet based visualization for PowerBI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;De gegevens over de bevingen zijn afkomstig van het KNMI, die over het Groningen veld van de NAM. Voor bevingen en gaswinning is de distributie gebruikt van &lt;a href=&quot;http://www.bevinggevoeld.nl&quot;&gt;Bevinggevoeld.nl&lt;/a&gt;. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content><author><name></name></author><summary type="html">In vorige blog posts heb ik laten zien hoe je met de Shape-kaart en Mapbox visuals een kaart kunt maken in Power BI. De functionaliteit van zo’n kaart is beperkt. Het is bijvoorbeeld niet mogelijk om meerdere thematische lagen toe te voegen die je onafhankelijk van elkaar kunt aan- of uitzetten. Het is ook niet mogelijk om de BRT Achtergrondkaart als topografische ondergrond te gebruiken. De BRT Achtergrondkaart is de officiële topografische kaart van de overheid. Meer weten over de BRT Achtergrondkaart? Lees dan deze post.</summary></entry><entry><title type="html">Power BI en LocatieServer</title><link href="http://friesewoudloper.nl/2019/12/27/Power-BI-en-LocatieServer.html" rel="alternate" type="text/html" title="Power BI en LocatieServer" /><published>2019-12-27T00:00:00+00:00</published><updated>2019-12-27T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/12/27/Power-BI-en-LocatieServer</id><content type="html" xml:base="http://friesewoudloper.nl/2019/12/27/Power-BI-en-LocatieServer.html">&lt;p&gt;In deze blog post laat ik zien hoe je adressen in Power BI kunt standaardiseren en verrijken met behulp van &lt;a href=&quot;https://www.pdok.nl/restful-api/-/article/pdok-locatieserver&quot;&gt;LocatieServer&lt;/a&gt; van &lt;a href=&quot;https://www.pdok.nl&quot;&gt;Publieke Dienstverlening Op de Kaart (PDOK)&lt;/a&gt;. PDOK is een centrale voorziening voor het ontsluiten van geografische gegevens van de overheid. LocatieServer is een &lt;a href=&quot;https://nl.wikipedia.org/wiki/Application_programming_interface&quot;&gt;API&lt;/a&gt; op een deel van deze gegevens. Met LocatieServer kun je bijvoorbeeld gegevens opvragen van adressen, kadastrale percelen, wegen, buurten, wijken en hectometerpaaltjes.&lt;/p&gt;

&lt;p&gt;De adressen van LocatieServer komen uit de Basisregistratie Adressen en Gebouwen (BAG). De BAG bevat de officiële schrijfwijze van adressen. Ieder adres heeft een uniek identificatienummer en coördinaten. Handig voor verdere verwerking!&lt;/p&gt;

&lt;p&gt;Met LocatieServer kun je zoeken op adressen, ook als er geen exacte match is. Hartstikke slim! LocatieServer geeft je de mogelijkheid om adressen te standaardiseren op de BAG en te verrijken met andere gegevens. In &lt;a href=&quot;https://github.com/FrieseWoudloper/web-api-workshop-gelderland/wiki/PDOK-LocatieServer&quot;&gt;deze tutorial&lt;/a&gt; staat beschreven hoe LocatieServer precies werkt.&lt;/p&gt;

&lt;p&gt;In het voorbeeld maak ik in de eerste stap een kleine dataset aan met twaalf adressen van provinciehuizen. De adressen zijn onvolledig of niet helemaal juist. Ik laat vervolgens zien hoe je met LocatieServer het volledige, officiële adres op kunt halen, en het adres ook nog eens kunt verrijken met buurt, wijk en coördinaten.&lt;/p&gt;

&lt;p&gt;Check eerst de landinstellingen voor importeren via &lt;em&gt;Bestand&lt;/em&gt; → &lt;em&gt;Options and settings&lt;/em&gt; → &lt;em&gt;Options&lt;/em&gt; → &lt;em&gt;CURRENT FILE&lt;/em&gt; → &lt;em&gt;Regional Settings&lt;/em&gt;. De juiste instelling is &lt;em&gt;English (United States)&lt;/em&gt; anders staat het decimaal scheidingsteken voor de coördinaten straks op de verkeerde plek.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-27/img04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voer de adressen in.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-27/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Selecteer de tabel. Kies voor &lt;em&gt;Edit query&lt;/em&gt; en daarna voor &lt;em&gt;Advanced Editor&lt;/em&gt;. Voeg extra stappen toe voor het versturen van een API request naar LocatieServer en het verwerken van de response. Gebruik &lt;a href=&quot;https://gist.githubusercontent.com/FrieseWoudloper/68de3449287c9ed43ac4f140d3991e4c/raw/9be21d051e2645ee581d1b9567410b2e49b3c4b5/provinciehuis.txt&quot;&gt;deze link&lt;/a&gt; om de code te kopiëren.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-27/img02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Klik op &lt;em&gt;Done&lt;/em&gt; en sluit de &lt;em&gt;Advanced Editor&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Sluit het &lt;em&gt;Query Editor Window&lt;/em&gt; en voer de wijzigingen door (&lt;em&gt;Close &amp;amp; Apply&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Het resultaat is een tabel met voor ieder provinciehuis het officiële, volledige adres, inclusief buurt- en wijknummer, en coördinaten in lengte- en breedtegraden. De code kan eenvoudig uitgebreid worden, zodat je voor ieder adres ook de gemeente, het waterschap en het kadastraal perceel krijgt.
 &lt;br /&gt;
 
&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-27/img03.png&quot; alt=&quot;&quot; /&gt; 
 &lt;/p&gt;

&lt;p&gt;Met behulp van de coördinaten kun je bijvoorbeeld een kaartje maken.&lt;/p&gt;

&lt;iframe width=&quot;800&quot; height=&quot;400&quot; src=&quot;https://app.powerbi.com/view?r=eyJrIjoiNjgwZTk4Y2EtNGMwYi00N2E1LThhZjMtNTI1MzEyMDEyMmIxIiwidCI6ImZkZjllNmE2LWY5NGYtNDE1Zi04NjIzLTk0YWNiYzU5OWU1NCIsImMiOjh9&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;       &lt;br /&gt;
     &lt;br /&gt;
Kortom: Je kunt LocatieServer gebruiken om de datakwaliteit van adressen in Power BI te verbeteren. Bedenk wel dat LocatieServer alleen werkt voor adressen in Nederland en dat je het aantal requests wel ietwat beperkt moet houden, anders loop je het risico dat je IP adres geblokkeerd wordt.&lt;/p&gt;</content><author><name></name></author><summary type="html">In deze blog post laat ik zien hoe je adressen in Power BI kunt standaardiseren en verrijken met behulp van LocatieServer van Publieke Dienstverlening Op de Kaart (PDOK). PDOK is een centrale voorziening voor het ontsluiten van geografische gegevens van de overheid. LocatieServer is een API op een deel van deze gegevens. Met LocatieServer kun je bijvoorbeeld gegevens opvragen van adressen, kadastrale percelen, wegen, buurten, wijken en hectometerpaaltjes.</summary></entry><entry><title type="html">CBS buurten visualiseren met Mapbox en Power BI</title><link href="http://friesewoudloper.nl/2019/12/07/CBS-buurten-visualiseren-met-Mapbox-en-Power-BI.html" rel="alternate" type="text/html" title="CBS buurten visualiseren met Mapbox en Power BI" /><published>2019-12-07T00:00:00+00:00</published><updated>2019-12-07T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/12/07/CBS-buurten-visualiseren-met-Mapbox-en-Power-BI</id><content type="html" xml:base="http://friesewoudloper.nl/2019/12/07/CBS-buurten-visualiseren-met-Mapbox-en-Power-BI.html">&lt;p&gt;In deze post laat ik zien hoe je CBS buurtgegevens met de Mapbox Visual kunt tonen op een kaart in Power BI.&lt;/p&gt;

&lt;p&gt;Ga in de browser naar het &lt;a href=&quot;https://www.nationaalgeoregister.nl/&quot;&gt;Nationaal Georegister&lt;/a&gt;. Zoek op &lt;a href=&quot;https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/metadata/effe1ab0-073d-437c-af13-df5c5e07d6cd&quot;&gt;CBS gebiedsindelingen&lt;/a&gt;. Open het tabblad &lt;em&gt;Downloads, views en links&lt;/em&gt;. Noteer de URL van de &lt;a href=&quot;https://nl.wikipedia.org/wiki/Web_Feature_Service&quot;&gt;WFS&lt;/a&gt; service en de naam van de kaartlaag (het &lt;em&gt;feature type&lt;/em&gt;) met de actuele buurtindeling.
&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voor het downloaden en converteren van de buurten gebruiken we &lt;a href=&quot;https://nl.wikipedia.org/wiki/CURL&quot;&gt;cURL&lt;/a&gt;. Check eerst of deze command line utility al beschikbaar is op jouw systeem. &lt;a href=&quot;https://curl.haxx.se/&quot;&gt;Installeer cURL&lt;/a&gt; als dit niet het geval is.&lt;/p&gt;

&lt;p&gt;Open een opdrachtprompt en voer het volgende commando uit:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;
curl &quot;https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&amp;amp;service=WFS&amp;amp;version=1.1.0&amp;amp;typeName=cbsgebiedsindelingen:cbs_buurt_2019_gegeneraliseerd&amp;amp;outputFormat=application/json&amp;amp;srsName=EPSG:4326&amp;amp;propertyName=geom,statcode&quot; -o E:\\Temp\\buurten.geojson
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Je kunt het resultaat ook via &lt;a href=&quot;http://friesewoudloper.nl/assets/misc/2019-12-07/buurten.geojson&quot;&gt;deze link&lt;/a&gt; downloaden.&lt;/p&gt;

&lt;p&gt;Merk op dat de &lt;em&gt;base URL&lt;/em&gt; van het service request is overgenomen uit het Nationaal Georegister. Hetzelfde geldt voor de waarde van de query parameter &lt;em&gt;typeName&lt;/em&gt;. Het outputbestand is in het GeoJSON formaat. Pas indien nodig het pad van de output directory aan. De geometrie is geconverteerd naar het &lt;a href=&quot;https://nl.wikipedia.org/wiki/WGS_84&quot;&gt;World Geodetic System 84 (EPSG:4326)&lt;/a&gt;. Mapbox kan namelijk niet overweg met het het standaard coördinatenstelsel van de service. Dat is het &lt;a href=&quot;https://nl.wikipedia.org/wiki/Rijksdriehoeksco%C3%B6rdinaten&quot;&gt;Rijksdriehoekstelsel, ofwel EPSG:28992&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Maak &lt;a href=&quot;https://account.mapbox.com/&quot;&gt;een gratis account Mapbox account&lt;/a&gt; aan. Ga naar de &lt;a href=&quot;https://account.mapbox.com/&quot;&gt;Account pagina&lt;/a&gt; en kopieer je Mapbox access token naar het klembord.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga naar de &lt;a href=&quot;https://studio.mapbox.com/tilesets/&quot;&gt;Tilesets&lt;/a&gt; pagina. Klik op &lt;em&gt;New tileset&lt;/em&gt; en upload het &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;buurten.geojson&lt;/code&gt; bestand.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Er wordt nu een nieuwe tileset toegevoegd met de buurten. Dit kan wel een aantal minuten duren.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img05.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let op: Mapbox genereert de naam van de tileset automatisch, die van jou heeft een andere naam dan buurten-809yxk.&lt;/p&gt;

&lt;p&gt;Vraag detailinformatie op door op de naam van de nieuwe tileset te klikken. In onderstaande schermafdruk zie je een preview van de tileset. Dat is niet altijd zo. Soms krijg je alleen maar een zwart vlak. Desondanks werkt de tileset wel in Power BI.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img06.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Noteer het &lt;em&gt;Tileset ID&lt;/em&gt;, de &lt;em&gt;Layer Name&lt;/em&gt; en de &lt;em&gt;Property Name&lt;/em&gt; van het veld met de buurtcodes.&lt;/p&gt;

&lt;p&gt;Merk op dat de tileset een &lt;em&gt;zoom extent&lt;/em&gt; heeft: De data zijn níet zichtbaar onder zoom level 8 en boven 14.&lt;/p&gt;

&lt;p&gt;Ga in de browser naar de pagina van het CBS over &lt;a href=&quot;https://www.cbs.nl/nl-nl/maatwerk/2019/31/kerncijfers-wijken-en-buurten-2019&quot;&gt;Kerncijfers wijken en buurten 2019&lt;/a&gt;. Download het XLS bestand. XLS is een verouderd formaat. Bij het laden van de gegevens in Power BI krijg ik een foutmelding.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img07.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Open het XLS bestand in Excel. Sla het op als XLSX bestand. Laad het XLSX bestand in Power BI. Selecteer alleen rijen met buurtgegevens. Dat zijn rijen waarvoor geldt: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;recs = buurt&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img08.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Het doel is om een choropleet te maken met de bevolkinsdichtheid per buurt. Daarvoor gebruiken we de waarde in de kolom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bev_dich&lt;/code&gt;. Deze kolom bevat echter een tekst, geen numerieke waarde. Dit komt doordat in het CBS bestand missende waarden gerepresenteerd worden door een punt. Maak een nieuwe kolom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bevolkingsdichtheid&lt;/code&gt; aan met een numerieke waarde. Zorg er voor dat velden met missende waarden leeg zijn.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img21.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga naar het &lt;em&gt;Visualisaties&lt;/em&gt; panel. Klik op de optie &lt;em&gt;Een aangepast visueel element importeren&lt;/em&gt;. Dat is het pictogram met de drie puntjes. Selecteer &lt;em&gt;Importeren vanuit de marketplace&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img09.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Zoek op &lt;em&gt;Mapbox&lt;/em&gt;. Klik op de knop &lt;em&gt;Toevoegen&lt;/em&gt; van de Mapbox Visual.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img10.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;De Mapbox Visual is toegevoegd aan het &lt;em&gt;Visualisaties&lt;/em&gt; panel.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img11.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Als ik nu de Mapbox Visual toevoeg aan mijn rapport, krijg ik een foutmelding:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img12.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;De workaround is om éérst een andere visual toe te voegen - bijvoorbeeld een tabel - en daarna pas de Mapbox Visual. Vervolgens kun je zonder problemen de eerste visual weer verwijderen. Raar maar waar.&lt;/p&gt;

&lt;p&gt;Selecteer de Mapbox Visual in je rapport. Pas eventueel de grootte en positie aan.&lt;/p&gt;

&lt;p&gt;Ga naar het tabblad &lt;em&gt;Velden&lt;/em&gt; in het &lt;em&gt;Visualisaties&lt;/em&gt; panel. Sleep de kolom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gwb_code&lt;/code&gt; naar &lt;em&gt;Location&lt;/em&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bevolkingsdichtheid&lt;/code&gt; naar &lt;em&gt;Color&lt;/em&gt;. De kolommen bevatten respectievelijk de buurtcode en het aantal huishoudens.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img13.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga naar het tabblad &lt;em&gt;Velden&lt;/em&gt;. Vul onder het kopje &lt;em&gt;Viz Settings&lt;/em&gt; je Mapbox acces token in.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img14.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Zet de &lt;em&gt;Circle&lt;/em&gt; optie uit en de &lt;em&gt;Choropleth&lt;/em&gt; optie aan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img15.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Selecteer onder het kopje &lt;em&gt;Choropleth&lt;/em&gt; voor &lt;em&gt;Data Level 1&lt;/em&gt; de waarde &lt;em&gt;Custom Tileset&lt;/em&gt;. Vul voor &lt;em&gt;Vector Tile Url Level 1&lt;/em&gt;, &lt;em&gt;Source Layer Name Level 1&lt;/em&gt; en &lt;em&gt;Vector Property Level 1&lt;/em&gt; respectievelijk de volgende waarden in: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mapbox://&lt;/code&gt; gevolgd door het Tileset ID, de Layer Name en Property Name die je hebt overgenomen van de website van Mapbox.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img16.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;De Mapbox Visual toont nu een kaart van Nederland. Op de kaart staan nog geen buurten. Dit komt door het zoomniveau. Zoom verder in en de buurten verschijnen.&lt;/p&gt;

&lt;p&gt;Pas de kleuren en de zoomlevels aan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Verander eventueel de doorzichtheid (&lt;em&gt;opacity&lt;/em&gt;) aan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img22.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pas de titel aan.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img18.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga naar het tabblad &lt;em&gt;Velden&lt;/em&gt; en sleep de kolom &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bevolkingsdichtheid&lt;/code&gt; naar &lt;em&gt;Tooltips&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img19.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voilà!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-07/img20.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Via &lt;a href=&quot;https://app.powerbi.com/view?r=eyJrIjoiMjhkNjdiYmMtMDNhYy00ODIyLTk2MzItNjVmYzBlY2ViNDE4IiwidCI6ImZkZjllNmE2LWY5NGYtNDE1Zi04NjIzLTk0YWNiYzU5OWU1NCIsImMiOjh9&quot;&gt;deze link&lt;/a&gt; kun je het resultaat bekijken. Vergeet niet dat je eerst in moet zoomen, voordat je iets te zien krijgt.&lt;/p&gt;</content><author><name></name></author><summary type="html">In deze post laat ik zien hoe je CBS buurtgegevens met de Mapbox Visual kunt tonen op een kaart in Power BI.</summary></entry><entry><title type="html">CBS gebieden in Power BI</title><link href="http://friesewoudloper.nl/2019/12/01/CBS-gebieden-in-Power-BI.html" rel="alternate" type="text/html" title="CBS gebieden in Power BI" /><published>2019-12-01T00:00:00+00:00</published><updated>2019-12-01T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/12/01/CBS-gebieden-in-Power-BI</id><content type="html" xml:base="http://friesewoudloper.nl/2019/12/01/CBS-gebieden-in-Power-BI.html">&lt;p&gt;In Power BI Desktop is het mogelijk om gebieden te tonen op een kaart. Hier kun je bijvoorbeeld de &lt;em&gt;Shape-kaart&lt;/em&gt; visual voor gebruiken. Shape-kaart herkent &lt;a href=&quot;https://docs.microsoft.com/nl-nl/power-bi/visuals/desktop-shape-map#netherlands-provinces&quot;&gt;provincienamen&lt;/a&gt; en koppelt deze automatisch aan de juiste geometrie. Helaas werkt het niet zo voor CBS gebiedsindelingen. Hoe kun je die in een Power BI dashboard tonen? In deze post laat ik dat zien met als voorbeeld arrondissementsgebieden.&lt;/p&gt;

&lt;p&gt;Geef eerst via &lt;em&gt;Bestand&lt;/em&gt; → &lt;em&gt;Opties en instellingen&lt;/em&gt; → &lt;em&gt;Opties&lt;/em&gt; → &lt;em&gt;Preview-functies&lt;/em&gt; aan dat je de Shape-kaart visual wilt uitproberen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voer de gegevens in. Zorg er voor dat je een kolom toevoegt waarmee iedere rij straks gekoppeld kan worden aan een vlak. In het voorbeeld is dat de code van het arrondissement.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ga vervolgens naar het &lt;a href=&quot;https://www.nationaalgeoregister.nl/&quot;&gt;Nationaal Georegister&lt;/a&gt;. Zoek op &lt;a href=&quot;https://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/metadata/effe1ab0-073d-437c-af13-df5c5e07d6cd&quot;&gt;CBS gebiedsindelingen&lt;/a&gt;. Open het tabblad &lt;em&gt;Downloads, views en links&lt;/em&gt;. Selecteer onder &lt;em&gt;Web Feature Service (WFS)&lt;/em&gt; de dataset &lt;em&gt;cbs_arrondissementsgebied_2019_gegeneraliseerd&lt;/em&gt; en het formaat &lt;em&gt;application/json&lt;/em&gt;. Download de data.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;#fn:1&quot; class=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img03.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Het &lt;a href=&quot;https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&amp;amp;service=WFS&amp;amp;version=1.1.0&amp;amp;typeName=cbsgebiedsindelingen:cbs_arrondissementsgebied_2019_gegeneraliseerd&amp;amp;outputFormat=application/json&quot;&gt;downloadbestand&lt;/a&gt; bevat voor elk arrondissement de geometrie in het Rijksdriehoekstelsel aangevuld met vier &lt;em&gt;properties&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Power BI kan echter alleen overweg met lengte- en breedtegraden en voor het maken van de kaart hebben we genoeg aan de property &lt;em&gt;statcode&lt;/em&gt;. Voeg &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;srsName=EPSG:4326&amp;amp;propertyName=geom,statcode&lt;/code&gt; toe aan de URL en &lt;a href=&quot;https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/wfs?request=GetFeature&amp;amp;service=WFS&amp;amp;version=1.1.0&amp;amp;typeName=cbsgebiedsindelingen:cbs_arrondissementsgebied_2019_gegeneraliseerd&amp;amp;outputFormat=application/json&amp;amp;srsName=EPSG:4326&amp;amp;propertyName=geom,statcode&quot;&gt;download&lt;/a&gt; de gegevens opnieuw. De geometrie is nu in het juiste coördinatenstelsel en het bestand is zo compact mogelijk.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img05.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Bewaar het bestand. Het formaat is &lt;a href=&quot;https://nl.wikipedia.org/wiki/GeoJSON&quot;&gt;GeoJSON&lt;/a&gt;. Jammer genoeg accepteert de Shape-kaart visual alleen &lt;a href=&quot;https://nl.wikipedia.org/wiki/TopoJSON&quot;&gt;TopoJSON&lt;/a&gt;. Verander de extensie van het bestand in .JSON en zet het daarna met &lt;a href=&quot;https://mapshaper.org&quot;&gt;Mapshaper.org&lt;/a&gt; om naar TopoJSON.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img06.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Voeg in Power BI de Shape-kaart visual toe aan het rapport. Sleep de kolom met de arrondissementscodes naar &lt;em&gt;Locatie&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img07.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Standaard probeert Power BI de arrondissementscodes te koppelen aan staten in de VS. Dat gaat natuurlijk niet lukken. Ga naar het tabblad &lt;em&gt;Indelingen&lt;/em&gt; → &lt;em&gt;Shape&lt;/em&gt; → &lt;em&gt;Toewijzing toevoegen&lt;/em&gt; en selecteer het TopoJSON bestand.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img08.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dat ziet er al een stuk beter uit! Ga terug naar het tabblad &lt;em&gt;Velden&lt;/em&gt; en sleep de kolom met fake data naar &lt;em&gt;kleurverzadiging&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img09.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pas de visual nog verder aan. Verander bijvoorbeeld de titel en kies een ander kleurverloop.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img10.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Een andere interessante optie is &lt;em&gt;Automatisch inzoomen&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-12-01/img11.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Klaar!&lt;/p&gt;

&lt;p&gt;Het resultaat kun je vanuit Power BI bijvoorbeeld op Internet publiceren, zodat iedereen er bij kan.&lt;/p&gt;

&lt;iframe width=&quot;800&quot; height=&quot;400&quot; src=&quot;https://app.powerbi.com/view?r=eyJrIjoiZjY3YmZlMTQtOGFjYy00YjEyLThlN2UtMDJlYjc2ZWMyNGMyIiwidCI6ImZkZjllNmE2LWY5NGYtNDE1Zi04NjIzLTk0YWNiYzU5OWU1NCIsImMiOjh9&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;p&gt;    &lt;br /&gt;
Als je veel gebieden hebt, bijvoorbeeld bij buurten, dan is de performance van de Shape-kaart erg slecht. In een volgende post ga ik onderzoeken of in dat geval de &lt;em&gt;Mapbox Visual&lt;/em&gt; uitkomst biedt.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Als je een andere dataset kies met veel objecten, kun je de gegevens beter niet in je browser, maar met &lt;a href=&quot;https://www.qgis.org&quot;&gt;QGIS&lt;/a&gt; downloaden. Anders loopt het downloaden vast. &lt;a href=&quot;#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;</content><author><name></name></author><summary type="html">In Power BI Desktop is het mogelijk om gebieden te tonen op een kaart. Hier kun je bijvoorbeeld de Shape-kaart visual voor gebruiken. Shape-kaart herkent provincienamen en koppelt deze automatisch aan de juiste geometrie. Helaas werkt het niet zo voor CBS gebiedsindelingen. Hoe kun je die in een Power BI dashboard tonen? In deze post laat ik dat zien met als voorbeeld arrondissementsgebieden.</summary></entry><entry><title type="html">BRT als alternatief voor Google Maps</title><link href="http://friesewoudloper.nl/2019/11/09/BRT-als-alternatief-voor-Google-Maps.html" rel="alternate" type="text/html" title="BRT als alternatief voor Google Maps" /><published>2019-11-09T00:00:00+00:00</published><updated>2019-11-09T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/11/09/BRT-als-alternatief-voor-Google-Maps</id><content type="html" xml:base="http://friesewoudloper.nl/2019/11/09/BRT-als-alternatief-voor-Google-Maps.html">&lt;p&gt;Een mooie topografische kaart maakt je website of app helemaal af. Voor het toevoegen van een kaart maken webontwikkelaars vaak gebruik van Google Maps. Dat is jammer. Er kleven namelijk nadelen aan Google Maps en er zijn goede alternatieven beschikbaar.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wat is het probleem met Google Maps?&lt;/em&gt;    &lt;br /&gt;
Het staat buiten kijf dat een ontwikkelaar met de Google Maps API snel en eenvoudig een kaart kan toevoegen aan zijn project. Maar daar staat tegenover dat het gebruik van de API niet altijd gratis is. Iedere maand krijg je 200 dollar aan API calls cadeau, maar daarna worden &lt;a href=&quot;https://cloud.google.com/maps-platform/pricing/sheet/&quot;&gt;kosten&lt;/a&gt; in rekening gebracht. Je bent verplicht om een creditcardnummer op te geven, ook al blijf je onder de limiet voor gratis gebruik.&lt;/p&gt;

&lt;p&gt;Een ander nadeel is dat Google bepaalt hoe de kaart er uit ziet.&lt;sup&gt;*&lt;/sup&gt; Google kiest bijvoorbeeld welke bedrijven worden weggelaten, of juist extra worden benadrukt.&lt;/p&gt;

&lt;p&gt;Voor overheidsorganisaties is er nóg een reden om geen Google Maps te gebruiken. Ze zijn namelijk wettelijk verplicht om bij de uitvoering van hun werkzaamheden de &lt;a href=&quot;https://zakelijk.kadaster.nl/brt&quot;&gt;Basisregistratie Topografie (BRT)&lt;/a&gt; te gebruiken. Dit is vastgelegd in de &lt;a href=&quot;https://wetten.overheid.nl/BWBR0021547/2010-01-01&quot;&gt;Wet basisregistraties kadaster en topografie&lt;/a&gt;. De BRT is de officiële topografische kaart van de Nederlandse overheid.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Welke alternatieven zijn er voor de kaart van Google Maps?&lt;/em&gt;    &lt;br /&gt;
De kaart van &lt;a href=&quot;https://www.openstreetmap.org&quot;&gt;OpenStreetMap&lt;/a&gt; is een goede optie. Binnen de overheid is de &lt;a href=&quot;https://www.pdok.nl/introductie/-/article/basisregistratie-topografie-achtergrondkaarten-brt-a-&quot;&gt;BRT-Achtergrondkaart&lt;/a&gt; echter de beste keuze. De kaart is gebaseerd op gegevens uit de basisregistratie. Er zijn geen kosten voor het gebruik. De BRT-Achtergrondkaart wordt beschikbaar gesteld via een &lt;a href=&quot;https://en.wikipedia.org/wiki/Web_Map_Tile_Service&quot;&gt;WMTS&lt;/a&gt; en &lt;a href=&quot;https://en.wikipedia.org/wiki/Tile_Map_Service&quot;&gt;TMS&lt;/a&gt; API. Je specificeert het coördinatenstelsel, zoomniveau, X- en Y-coördinaat in je request, en krijgt een afbeelding terug. De BRT-Achtergrondkaart is overigens open data en ook vrij beschikbaar voor (commerciële) toepassingen buiten de overheid.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hoe voeg je kaartviewer-functionaliteit toe?&lt;/em&gt;  &lt;br /&gt;
Google Maps biedt méér dan een plaatje. Het is ook een kaartviewer. Je kunt in- en uitzoomen, een legenda maken, markers aan de kaart toevoegen, enzovoort. Hoe doe je dat met de BRT-Achtergrondkaart? Daarvoor heb je een JavaScript library nodig, bijvoorbeeld &lt;a href=&quot;http://openlayers.org&quot;&gt;OpenLayers&lt;/a&gt; of &lt;a href=&quot;http://leaflet.org/&quot;&gt;Leaflet&lt;/a&gt;.&lt;/p&gt;

&lt;link rel=&quot;stylesheet&quot; href=&quot;https://unpkg.com/leaflet@1.5.1/dist/leaflet.css&quot; /&gt;

&lt;script src=&quot;https://unpkg.com/leaflet@1.5.1/dist/leaflet.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;voorbeeld1&quot; style=&quot;width: 600px; height: 450px;&quot;&gt;&lt;/div&gt;
&lt;script&gt;
	var map1 = L.map('voorbeeld1').setView([52.15, 5.35], 7); 

	L.tileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaart/EPSG:3857/{z}/{x}/{y}.png', {
		maxZoom: 18,
		attribution: '&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;CC-BY&lt;/a&gt; Kadaster '
	}).addTo(map1);

&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;
Je kunt kiezen welke kaartopmaak je wilt: standaard, grijs, pastel of water. Daarnaast kun je ook een actuele luchtfoto als ondergrond toevoegen.&lt;/p&gt;

&lt;div id=&quot;voorbeeld2&quot; style=&quot;width: 600px; height: 450px;&quot;&gt;&lt;/div&gt;
&lt;script&gt;
	var options = {maxZoom: 18, attribution: '&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;CC-BY&lt;/a&gt; Kadaster'}

	var standaard = L.tileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaart/EPSG:3857/{z}/{x}/{y}.png', options),
		grijs     = L.tileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaartgrijs/EPSG:3857/{z}/{x}/{y}.png', options),
		pastel    = L.tileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaartpastel/EPSG:3857/{z}/{x}/{y}.png', options),
		water     = L.tileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaartwater/EPSG:3857/{z}/{x}/{y}.png', options),
		luchtfoto = L.tileLayer('https://geodata.nationaalgeoregister.nl/luchtfoto/rgb/wmts/Actueel_ortho25/EPSG:3857/{z}/{x}/{y}.jpeg', options);

	var map2 = L.map('voorbeeld2', {
		center: [53.219515, 6.568813],
		zoom: 13,
		layers: [standaard]
	});

	var baseMaps = {
		&quot;Standaard&quot;: standaard,
		&quot;Grijs&quot;:     grijs,
		&quot;Pastel&quot;:    pastel,
		&quot;Water&quot;:     water,
		&quot;Luchtfoto&quot;: luchtfoto
	};

	L.control.layers(baseMaps, null, {collapsed: false}).addTo(map2);
	
	var marker = L.marker([53.219515, 6.568813]).addTo(map2);
	marker.bindPopup(&quot;Dit is de Martinitoren&quot;).openPopup();
&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Naast de verschillende weergaven van de BRT-Achtergrondkaart is er ook nog de &lt;a href=&quot;https://www.pdok.nl/introductie/-/article/opentopo&quot;&gt;OpenTopo&lt;/a&gt; achtergrondkaart. OpenTopo is gebaseerd op meerdere gegevensbronnen van de overheid, waaronder de BRT, en maakt daarnaast gebruik van OpenStreetMap. De kaart is alleen beschikbaar in het &lt;a href=&quot;https://nl.wikipedia.org/wiki/Rijksdriehoeksco%C3%B6rdinaten&quot;&gt;Rijksdriehoekstelsel&lt;/a&gt; (EPSG:28992) en niet in de Web Mercator projectie (EPSG:3857). Hier moet je rekening mee houden in de code.&lt;/p&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.5.0/proj4.js&quot;&gt;&lt;/script&gt;

&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/proj4leaflet/1.0.2/proj4leaflet.js&quot;&gt;&lt;/script&gt;

&lt;div id=&quot;voorbeeld3&quot; style=&quot;width: 600px; height: 450px;&quot;&gt;&lt;/div&gt;
&lt;script&gt;
	var crs = new L.Proj.CRS('EPSG:28992', '+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.2369,50.0087,465.658,-0.406857330322398,0.350732676542563,-1.8703473836068,4.0812 +no_defs',
		{
			resolutions: [3440.640, 1720.320, 860.160, 430.080, 215.040, 107.520, 53.760, 26.880, 13.440, 6.720, 3.360, 1.680, 0.840, 0.420, 0.210],
			bounds: L.bounds([-285401.92, 22598.08], [595401.9199999999, 903401.9199999999]),
			origin: [-285401.92, 22598.08]
		}
	);
		
	var map3 = L.map('voorbeeld3', {
		crs: crs,
        zoom: 13, 
        center: [53.219515, 6.568813] 
	});
	
	new L.TileLayer('https://geodata.nationaalgeoregister.nl/tiles/service/tms/1.0.0/opentopoachtergrondkaart/EPSG:28992/{z}/{x}/{y}.png', {
		minZoom: 0,
		maxZoom: 13,
		tms: true,
		attribution: '&lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/&quot;&gt;CC-BY&lt;/a&gt; Bron: J.W. van Aalst, &lt;a href=&quot;http://www.opentopo.nl&quot;&gt;www.opentopo.nl&lt;/a&gt;'
	}).addTo(map3);
	
	var marker = L.marker([53.219515, 6.568813]).addTo(map3);
	marker.bindPopup(&quot;Dit is de Martinitoren&quot;);
&lt;/script&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;De code van de voorbeelden in deze post kun je downloaden via deze &lt;a href=&quot;https://gist.github.com/FrieseWoudloper/b8f68be19299e19a3239ea2ee06c5a0f&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Meer weten over Leaflet?&lt;/em&gt;   &lt;br /&gt;
Volg de &lt;a href=&quot;https://github.com/NieneB/webmapping_for_developers&quot;&gt;web map workshop for developers&lt;/a&gt; van Niene Boeijen. Vergeet ook vooral niet om op haar te &lt;a href=&quot;https://response.questback.com/isa/qbv.dll/ShowQuest?QuestID=5409765&amp;amp;sid=Lf7iwmHaek&quot;&gt;stemmen voor de Geo Prestige Award 2019&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Niet zo handig met JavaScript?&lt;/em&gt;   &lt;br /&gt;
&lt;a href=&quot;https://www.nlmaps.nl&quot;&gt;NL Maps&lt;/a&gt; maakt het nóg makkelijker om een kaart toe te voegen aan je website. Je beantwoordt een aantal vragen, waarna NL Maps de JavaScript code automatisch voor je genereert. Kopiëren, en klaar!&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;*&lt;/sup&gt; Na publicatie van dit artikel werd ik er op geattendeerd dat het wel mogelijk is om &lt;a href=&quot;https://mapstyle.withgoogle.com/&quot;&gt;een eigen kaartopmaak voor Google Maps&lt;/a&gt; te definiëren.&lt;/p&gt;</content><author><name></name></author><summary type="html">Een mooie topografische kaart maakt je website of app helemaal af. Voor het toevoegen van een kaart maken webontwikkelaars vaak gebruik van Google Maps. Dat is jammer. Er kleven namelijk nadelen aan Google Maps en er zijn goede alternatieven beschikbaar.</summary></entry><entry><title type="html">Installatie van GeoPandas</title><link href="http://friesewoudloper.nl/2019/06/26/Installatie-van-GeoPandas.html" rel="alternate" type="text/html" title="Installatie van GeoPandas" /><published>2019-06-26T00:00:00+00:00</published><updated>2019-06-26T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/06/26/Installatie-van-GeoPandas</id><content type="html" xml:base="http://friesewoudloper.nl/2019/06/26/Installatie-van-GeoPandas.html">&lt;p&gt;Deze week was ik bij &lt;a href=&quot;https://godatadriven.com/&quot;&gt;GoDataDriven&lt;/a&gt; in Amsterdam voor de cursus &lt;a href=&quot;https://training.xebia.com/data-science/data-science-with-python&quot;&gt;Data Science met Python&lt;/a&gt;. In de cursus was er veel aandacht voor &lt;a href=&quot;https://pandas.pydata.org/&quot;&gt;Pandas&lt;/a&gt;. Met Pandas wordt het manipuleren en analyseren van gegevens in Python een stuk eenvoudiger!&lt;/p&gt;

&lt;p&gt;Ik nam mij voor om informatievragen in de komende periode zo veel mogelijk te beantwoorden met behulp van Python. Dan beklijft de cursus beter. Omdat ik bij de provincie vooral werk met geografische gegevens, wil ik ook &lt;a href=&quot;http://geopandas.org/&quot;&gt;GeoPandas&lt;/a&gt; gaan gebruiken.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;GeoPandas is an open source project to make working with geospatial data in python easier.       &lt;br /&gt;
GeoPandas extends the datatypes used by pandas to allow spatial operations on geometric types.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Het installeren van GeoPandas op mijn Windows laptop bleek nog niet zo eenvoudig. GeoPandas is afhankelijk van een aantal andere packages waaronder &lt;a href=&quot;https://pypi.org/project/GDAL/&quot;&gt;GDAL&lt;/a&gt;, &lt;a href=&quot;https://pypi.org/project/Fiona/&quot;&gt;Fiona&lt;/a&gt;, &lt;a href=&quot;https://pypi.org/project/pyproj/&quot;&gt;pyproj&lt;/a&gt;, &lt;a href=&quot;https://pypi.org/project/Rtree/&quot;&gt;RTree&lt;/a&gt; en &lt;a href=&quot;https://pypi.org/project/Shapely/&quot;&gt;Shapely&lt;/a&gt;. Het installeren van deze &lt;em&gt;dependencies&lt;/em&gt; was de moeilijkheid.&lt;/p&gt;

&lt;p&gt;Voor het installeren van GeoPandas volgde ik de stappen in het artikel &lt;a href=&quot;https://geoffboeing.com/2014/09/using-geopandas-windows/&quot;&gt;Using geopandas on Windows&lt;/a&gt; van Geoff Boeing. Ik gebruik de &lt;a href=&quot;https://www.anaconda.com/distribution/&quot;&gt;Anaconda&lt;/a&gt; Python distributie. Daarom probeerde ik eerst om GeoPandas te installeren met de conda package manager:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;conda install -c conda-forge geopandas
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Ik kreeg de volgende waarschuwing en besloot de installatie af te breken:  &lt;br /&gt;
&lt;em&gt;WARNING: The conda.compat module is deprecated and will be removed in a future release.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Daarna volgde ik de instructies onder &lt;em&gt;Installing geopandas and its dependencies manually&lt;/em&gt;. Ik probeerde de installatie uit te voeren met behulp van de pip package manager en wheels. &lt;a href=&quot;https://pythonwheels.com/&quot;&gt;Wheel&lt;/a&gt; is een installatieformaat waarbij het niet meer nodig is om code lokaal te compileren. Dat is vooraf al gebeurd.&lt;/p&gt;

&lt;p&gt;Helaas had dit ook niet het gewenste resultaat. Dit testte ik in Jupyter met de volgende code:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;from osgeo import gdal, ogr, osr         
from fiona.ogrext import Iterator, ItemsIterator, KeysIterator         
from geopandas import GeoDataFrame         
gdal.VersionInfo()       
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;GDAL (versie 3.0.0) was goed geïnstalleerd, Fiona en GeoPandas niet. Het importeren van Fiona gaf namelijk een foutmelding: &lt;em&gt;ImportError: DLL load failed: The specified module could not be found&lt;/em&gt;.    &lt;br /&gt;
Fiona is afhankelijk van GDAL, en GeoPandas weer van Fiona. Als Fiona niet goed geïnstalleerd is, werkt GeoPandas ook niet.&lt;/p&gt;

&lt;p&gt;Het is uiteindelijk toch gelukt om GeoPandas te installeren. Dit zijn de stappen die daarvoor nodig waren:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Deïnstalleren van Anaconda.&lt;/li&gt;
  &lt;li&gt;Installeren van de nieuwste versie van Anaconda.&lt;/li&gt;
  &lt;li&gt;Opstarten van Anaconda Powershell Prompt met beheerrechten (&lt;em&gt;Run as Administrator&lt;/em&gt;).&lt;/li&gt;
  &lt;li&gt;Uitvoeren van &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conda update conda&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Uitvoeren van &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;conda install -c conda-forge geopandas&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Als ik in Jupyter dezelfde code uitvoer als eerder, krijg ik geen foutmelding meer.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-06-26/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Het versienummer van GDAL is nu 2.0.3. Blijkbaar installeert conda een oudere versie van GDAL. Misschien was de hogere versie van GDAL in het &lt;a href=&quot;https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal&quot;&gt;wheel van Christoph Gohlke&lt;/a&gt; het probleem?&lt;/p&gt;

&lt;p&gt;Hoe dan ook, ik kan aan de slag!&lt;/p&gt;</content><author><name></name></author><summary type="html">Deze week was ik bij GoDataDriven in Amsterdam voor de cursus Data Science met Python. In de cursus was er veel aandacht voor Pandas. Met Pandas wordt het manipuleren en analyseren van gegevens in Python een stuk eenvoudiger!</summary></entry><entry><title type="html">API requests afvangen met Postman</title><link href="http://friesewoudloper.nl/2019/06/14/API-requests-afvangen-met-Postman.html" rel="alternate" type="text/html" title="API requests afvangen met Postman" /><published>2019-06-14T00:00:00+00:00</published><updated>2019-06-14T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/06/14/API-requests-afvangen-met-Postman</id><content type="html" xml:base="http://friesewoudloper.nl/2019/06/14/API-requests-afvangen-met-Postman.html">&lt;p&gt;Welke requests doet de &lt;em&gt;ArcGIS Server Feature Service&lt;/em&gt; reader van FME Desktop ‘onder de motorkap’? Dat vroeg ik mij af naar aanleiding van deze &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6539908644769718272/?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6539908644769718272%2C6541268229413830656%29&quot;&gt;reactie van Arno van Anrooij&lt;/a&gt; op mijn &lt;a href=&quot;[deze post](http://friesewoudloper.nl/2019/06/05/Hergebruik-van-bodemkwaliteitsgegevens.html)&quot;&gt;blog post over het Bodemloket&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Het is eenvoudig om de requests af te vangen met Postman. Deze post is eigenlijk een notitie voor mijzelf, voor ‘future reference’. Om het werkend te krijgen moet je drie dingen doen: de configuratie van Postman aanpassen, je lokale IP adres opvragen en een proxyserver instellen.&lt;/p&gt;

&lt;p&gt;Postman is een handige tool voor het uitproberen en testen van REST API’s. Ik gebruik de gratis versie die je &lt;a href=&quot;https://www.getpostman.com/downloads/&quot;&gt;hier&lt;/a&gt; kunt downloaden. Hoe je de instellingen van Postman moet aanpassen voor het afvangen van requests, is gedocumenteerd op &lt;a href=&quot;https://learning.getpostman.com/docs/postman/sending_api_requests/capturing_http_requests&quot;&gt;deze pagina&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Het IP adres van een computer met Windows als besturingssyteem vraag je snel op met de &lt;a href=&quot;https://www.lifewire.com/ip-config-818377&quot;&gt;ipconfig command line utility&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Het configureren van een proxy server onder Windows 10 doe je via &lt;em&gt;Instellingen&lt;/em&gt; &amp;gt; &lt;em&gt;Netwerk en internet&lt;/em&gt; &amp;gt; &lt;em&gt;Proxy&lt;/em&gt;. Scroll naar beneden naar &lt;em&gt;Handmatige proxyconfiguratie&lt;/em&gt;. Zet &lt;em&gt;Proxyserver gebruiken&lt;/em&gt; aan. Vul het lokale IP adres in en het nummer van de poort waarop Postman luistert. Vergeet niet als laatste stap de configuratie op te slaan.&lt;/p&gt;

&lt;p&gt;Als je in FME Desktop nu de workspace uitvoert met de &lt;em&gt;ArcGIS Server Feature Service&lt;/em&gt; reader, verschijnen de requests in Postman de &lt;em&gt;Historie&lt;/em&gt; tab in de sidebar.&lt;/p&gt;</content><author><name></name></author><summary type="html">Welke requests doet de ArcGIS Server Feature Service reader van FME Desktop ‘onder de motorkap’? Dat vroeg ik mij af naar aanleiding van deze reactie van Arno van Anrooij op mijn blog post over het Bodemloket.</summary></entry><entry><title type="html">Hergebruik van bodemkwaliteitsgegevens - deel 2</title><link href="http://friesewoudloper.nl/2019/06/05/Hergebruik-van-bodemkwaliteitsgegevens-deel-2.html" rel="alternate" type="text/html" title="Hergebruik van bodemkwaliteitsgegevens - deel 2" /><published>2019-06-05T00:00:00+00:00</published><updated>2019-06-05T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/06/05/Hergebruik-van-bodemkwaliteitsgegevens-deel-2</id><content type="html" xml:base="http://friesewoudloper.nl/2019/06/05/Hergebruik-van-bodemkwaliteitsgegevens-deel-2.html">&lt;p&gt;Vorige maand schreef ik een blog over hoe je de gegevens uit het Bodemloket kunt downloaden voor hergebruik in eigen toepassingen. &lt;a href=&quot;https://twitter.com/_ivor/status/1135440800563826688&quot;&gt;Ivor Bosloper&lt;/a&gt; en &lt;a href=&quot;https://www.linkedin.com/feed/update/urn:li:activity:6539908644769718272?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A6539908644769718272%2C6541268229413830656%29&quot;&gt;Arno van Anrooij&lt;/a&gt; kwamen met suggesties voor verbetering. Het resultaat is een veel eenvoudiger en sneller downloadscript.&lt;/p&gt;

&lt;p&gt;Wat is het probleem?      &lt;br /&gt;
De gegevens in het Bodemloket worden ontsloten via de ArcGIS REST API. De dataset bestaat uit meer dan 500.000 rijen. De API retourneert er echter niet meer dan 1.000 per request. Hoe kun je dan toch alle gegevens opvragen? Het antwoord ligt voor de hand: door meerdere requests te doen.&lt;/p&gt;

&lt;p&gt;De meest eenvoudige manier om dit te doen, is door gebruik te maken van de query parameters &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;resultOffset&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;resultRecordCount&lt;/code&gt;. Dat lukt in dit geval echter niet, omdat de service niet geconfigureerd is voor het ondersteunen van &lt;em&gt;response paging&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Een andere optie is om rijen te filteren met behulp van een &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;where&lt;/code&gt; query parameter. Dat gaat met deze service ook niet altijd goed. Requests met een filter retourneren regelmatig foutcode 400 (&lt;em&gt;Unable to complete request&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Wat werkt dan wél?  &lt;br /&gt;
De truc is om een filter op te geven met daarin expliciet alle identificatienummers van de rijen die je wilt opvragen. Dat doe je als volgt.&lt;/p&gt;

&lt;p&gt;Iedere rij heeft een uniek identificatienummer. Dat is een eis die de ArcGIS software stelt. Voor de dataset met _WBB locaties _ is dat het attribuut &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WBB_DOSSIER_DBK&lt;/code&gt;. Dat kun je checken in de &lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1&quot;&gt;documentatie&lt;/a&gt;: het attribuut heeft als is namelijk van het type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;esriFieldTypeOID&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Je kunt voor alle rijen met één request het unieke identificatienummer opvragen met behulp van de query parameter &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;returnIdsOnly=True&lt;/code&gt;. De beperking dat de service maximaal 1.000 rijen per request retourneert, is nu niet van toepassing. Dit request retourneert meer dan 500.000 identificatienummers:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;returnIdsOnly=True&amp;amp;f=json&quot;&gt;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;returnIdsOnly=True&amp;amp;f=json&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Daarna doe je een POST (geen GET!) request, waarbij je de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;objectIds&lt;/code&gt; parameter toevoegt aan de request body. Als parameter waarde geef je de eerste 1.000 identificatienummers op gescheiden door een komma.&lt;/p&gt;

&lt;p&gt;Endpoint en query parameters:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;
https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;outFields=*&amp;amp;f=geojson
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Body:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;
  objectIds=18005606,18005621,18005632, ... , 2C17911893,17911904
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Zo kun je batchgewijs alle rijen opvragen.&lt;/p&gt;

&lt;p&gt;In FME Desktop kun je de gegevens uit het Bodemloket inlezen met behulp van de &lt;em&gt;Esri ArcGIS Server Feature Service&lt;/em&gt; reader. Deze reader doet ‘onder de motorkap’ de requests zoals hierboven beschreven.&lt;/p&gt;

&lt;p&gt;Als je meer wilt weten over de mogelijkheden van de ArcGIS REST API, raadpleeg dan de &lt;a href=&quot;ArcGIS REST API&quot;&gt;documentatie&lt;/a&gt; of volg het eerste deeel van de workshop &lt;a href=&quot;https://github.com/FrieseWoudloper/web-api-workshop/wiki&quot;&gt;Web API’s voor beginners&lt;/a&gt;.&lt;/p&gt;</content><author><name></name></author><summary type="html">Vorige maand schreef ik een blog over hoe je de gegevens uit het Bodemloket kunt downloaden voor hergebruik in eigen toepassingen. Ivor Bosloper en Arno van Anrooij kwamen met suggesties voor verbetering. Het resultaat is een veel eenvoudiger en sneller downloadscript.</summary></entry><entry><title type="html">Hergebruik van bodemkwaliteitsgegevens</title><link href="http://friesewoudloper.nl/2019/05/30/Hergebruik-van-bodemkwaliteitsgegevens.html" rel="alternate" type="text/html" title="Hergebruik van bodemkwaliteitsgegevens" /><published>2019-05-30T00:00:00+00:00</published><updated>2019-05-30T00:00:00+00:00</updated><id>http://friesewoudloper.nl/2019/05/30/Hergebruik-van-bodemkwaliteitsgegevens</id><content type="html" xml:base="http://friesewoudloper.nl/2019/05/30/Hergebruik-van-bodemkwaliteitsgegevens.html">&lt;p&gt;Follow The Money (FTM) heeft dit voorjaar een nieuw dossier geopend: Gore Grond in je Gemeente. Op 11 april deed dit platform voor onderzoeksjournalistiek een oproep: &lt;a href=&quot;https://www.ftm.nl/artikelen/kaart-gore-grond?utm_medium=social&amp;amp;utm_campaign=sharebuttonleden&quot;&gt;Bodemvervuiling in jouw gemeente? Zet het op de kaart&lt;/a&gt;. Volgens FTM zijn overheden niet altijd even transparant over bodemverontreiniging. Informatie is moeilijk te vinden en lastig te interpreteren. Dat geldt met name voor de spoedlocaties. Dat zijn plaatsen waar de vervuiling zo erg is, dat er direct maatregelen genomen moeten worden.&lt;/p&gt;

&lt;p&gt;De overheid stelt informatie over de bodemkwaliteit beschikbaar via het &lt;a href=&quot;https://www.bodemloket.nl/kaart&quot;&gt;Bodemloket&lt;/a&gt;. Na het lezen van de oproep vroeg ik me af of de gegevens in het Bodemloket geschikt zijn voor hergebruik door FTM. Ik ging op onderzoek uit.&lt;/p&gt;

&lt;p&gt;Een &lt;a href=&quot;http://www.nationaalgeoregister.nl/geonetwork/srv/dut/catalog.search#/search?facet.q=orgName%2FRijkswaterstaat&amp;amp;isChild='false'&amp;amp;resultType=details&amp;amp;fast=index&amp;amp;_content_type=json&amp;amp;from=1&amp;amp;to=20&amp;amp;sortBy=relevance&amp;amp;any_OR__title=bodemloket&quot;&gt;zoekopdracht op ‘Bodemloket’ in het Nationaal Georegister&lt;/a&gt; levert vijf datasets op. Jammer genoeg zijn het allemaal &lt;a href=&quot;https://nl.wikipedia.org/wiki/Web_Map_Service&quot;&gt;Web Map Services (WMS)&lt;/a&gt;. Dat betekent dat de services niet gebruikt kunnen worden om de ruwe data op te vragen.&lt;/p&gt;

&lt;p&gt;Terug naar de kaart in het Bodemloket. Bij het laden van de pagina zie je onder water - bijvoorbeeld met Chrome DevTools - dat de bodemkwaliteitgegevens worden opgevraagd bij een webservice:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://friesewoudloper.nl/assets/img/2019-05-30/img01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Het gaat om het volgende endpoint:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
https://www.gdngeoservices.nl/arcgis/services/blk/lks_blk_rd/MapServer/WMSServer
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Helaas is dit ook een WMS. Toch geeft de URL een belangrijk stukje informatie: de service wordt gepubliceerd met &lt;a href=&quot;&quot;&gt;ArcGIS Server&lt;/a&gt;. Je kunt nu de ArcGIS REST Services Directory opvragen door de URL aan te passen:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services&quot;&gt;https://www.gdngeoservices.nl/arcgis/rest/services&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Via deze mappenstructuur kun je bij de REST API van het Bodemloket:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer&quot;&gt;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Met de REST API kun je vier datasets (&lt;em&gt;layers&lt;/em&gt;) opvragen. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WBB_punten&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WBB_locaties&lt;/code&gt; bevatten respectievelijk punten en vlakken van Wet bodembescherming (WBB)
locaties. Het volgnummer van de layer is belangrijk om het endpoint voor een request te bepalen. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WBB_locaties&lt;/code&gt; is bijvoorbeeld de tweede layer en heeft volgnummer 1.&lt;/p&gt;

&lt;p&gt;Het is nu relatief eenvoudig om locaties als GeoJSON bestand op te vragen:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
&lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;outFields=*&amp;amp;f=geojson&quot;&gt;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;outFields=*&amp;amp;f=geojson&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;De response bevat maar 1.000 locaties. Het zijn er in werkelijkheid &lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;returnCountOnly=true&amp;amp;f=json&quot;&gt;véél meer&lt;/a&gt;. Het is niet mogelijk om meer dan 1.000 locaties per request op te vragen. Hoe kun je dan toch alle locaties opvragen?&lt;/p&gt;

&lt;p&gt;Helaas is response paging uitgezet in de configuratie van de service. Een alternatief is om zelf meerdere requests te genereren waarmee in stappen alle locaties worden opgevraagd. Dit kan op twee manieren:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;in de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;where&lt;/code&gt; query parameter filteren op een attribuut dat een uniek identificatienummer bevat of&lt;/li&gt;
  &lt;li&gt;met de query parameters &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;geometryType&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;inSR&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;geometry&lt;/code&gt; en &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;spatialRel&lt;/code&gt; filteren op gebied.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;De eerste optie is in dit geval ongeschikt. Alleen &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WBB_DOSSIER_DBK&lt;/code&gt; lijkt in aanmerking te komen als uniek identificatienummer. Requests waarbij gefilterd wordt op dit attribuut retourneren regelmatig foutcode 400 (&lt;em&gt;Unable to complete operation&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Bij de tweede optie verdeel je het interessegebied - bijvoorbeeld een provincie of heel Nederland - in een grid. Per tegel binnen het grid doe je een request (&lt;a href=&quot;https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&amp;amp;outFields=*&amp;amp;f=geojson&amp;amp;geometryType=esriGeometryEnvelope&amp;amp;inSR=28992&amp;amp;geometry=258000,594000,259000,595000&amp;amp;spatialRel=esriSpatialRelIntersects&quot;&gt;voorbeeld&lt;/a&gt;). Het probleem is dat je de afmetingen van een tegel zo moet kiezen, dat er niet meer dan 1.000 locaties binnen een tegel liggen.&lt;/p&gt;

&lt;p&gt;Zo langzamerhand wordt het best ingewikkeld! Daarom heb ik in &lt;a href=&quot;https://www.safe.com/fme/fme-desktop/&quot;&gt;FME Desktop&lt;/a&gt; een script gemaakt voor het genereren van de requests en samenvoegen van de responses. Het script is te &lt;a href=&quot;https://github.com/FrieseWoudloper/FME_workspaces/blob/master/bodemloket&quot;&gt;downloaden&lt;/a&gt; van GitHub. Ik heb het -vanwege de grote hoeveelheid data- alleen nog maar getest per provincie, nog niet voor heel Nederland.&lt;/p&gt;

&lt;p&gt;Uit de gegevens die de REST API retourneert, kun je voor iedere locatie ook de hyperlink naar het rapport met de voortgang van het bodemonderzoek afleiden:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;
https://www.bodemloket.nl/bodemloket/tools/report/guid/[NEN3610_ID_SOIL_MANAGEMENT]/[LOCATIECODE_BEVOEGD_GEZAG]/SIKB_12
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Tussen de blokhaken komen de waarden van de gelijknamige attributen te staan (&lt;a href=&quot;https://www.bodemloket.nl/bodemloket/tools/report/guid/3f5be5f4-4874-41ac-b8bb-4007612a6aa6/FR008800079/SIKB_12&quot;&gt;voorbeeld&lt;/a&gt;). In het voortgangsrapport staat méér informatie dan in de API response, bijvoorbeeld de locatienaam, onderzoeksrapporten en besluiten. Helaas is deze informatie niet rechtstreeks via de API op te vragen in een gestructureerd formaat. Je moet de gegevens zelf scrapen als je ze voor een analyse wilt gebruiken.&lt;/p&gt;

&lt;p&gt;De conclusie is dat FTM gelijk heeft: het is inderdaad niet  makkelijk is om de ruwe bodemkwaliteitsgegevens op te vragen, want:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;de ArcGIS REST API is niet opgenomen in het Nationaal Georegister en daardoor moeilijk vindbaar,&lt;/li&gt;
  &lt;li&gt;response paging is uitgezet,&lt;/li&gt;
  &lt;li&gt;er is geen duidelijke API documentatie,&lt;/li&gt;
  &lt;li&gt;niet alle (gestructureerde) gegevens worden rechtstreeks ontsloten via de REST API.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Daarnaast zijn er nog semantische problemen. De betekenis van attributen is niet meteen duidelijk. En hoe filter je eigenlijk alle spoedlocaties uit het Bodemloket?&lt;/p&gt;

&lt;p&gt;Kortom: er is nog veel ruimte voor verbetering als het gaat om het ontsluiten van bodemkwaliteitgegevens voor hergebruik door andere partijen dan de overheid.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Aanvulling op 5 juni 2019:&lt;/u&gt;&lt;br /&gt;
Inmiddels weet ik dat het wél mogelijk is om alle gegevens op te vragen door te filteren op een uniek identificatienummer. Dat is sneller een eenvoudiger dan de gegevens opvragen met een grid. In &lt;a href=&quot;http://friesewoudloper.nl/2019/06/05/Hergebruik-van-bodemkwaliteitsgegevens-deel-2.html&quot;&gt;deze post&lt;/a&gt; leg ik uit hoe dat moet.&lt;/p&gt;</content><author><name></name></author><summary type="html">Follow The Money (FTM) heeft dit voorjaar een nieuw dossier geopend: Gore Grond in je Gemeente. Op 11 april deed dit platform voor onderzoeksjournalistiek een oproep: Bodemvervuiling in jouw gemeente? Zet het op de kaart. Volgens FTM zijn overheden niet altijd even transparant over bodemverontreiniging. Informatie is moeilijk te vinden en lastig te interpreteren. Dat geldt met name voor de spoedlocaties. Dat zijn plaatsen waar de vervuiling zo erg is, dat er direct maatregelen genomen moeten worden.</summary></entry></feed>