<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>geocoding &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/geocoding/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:30 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>geocoding &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>bePelias, een lokale geocoder gebaseerd op BeSt Address</title>
		<link>https://www.smalsresearch.be/bepelias-een-lokale-geocoder-gebaseerd-op-best-address/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Fri, 26 Apr 2024 09:35:28 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=20443</guid>

					<description><![CDATA[Geocodering is de bewerking waarbij een tekstueel postadres (‘Fonsnyln 20, 1060 Brussel’) omgevormd wordt tot een in componenten opgesplitste en gestandaardiseerde versie, gelinkt aan een geografische locatie]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/bepelias-un-geocodeur-local-base-sur-best-address/" data-type="post" data-id="20294">Version en français</a></em></p>



<p>Geocodering is de bewerking waarbij een tekstueel postadres (‘Fonsnyln 20, 1060 Brussel’) omgevormd wordt tot een in componenten opgesplitste en gestandaardiseerde versie, gelinkt aan een geografische locatie1<sup data-fn="b7665c04-0011-4cad-a98a-5e516f4a994c" class="fn"><a href="#b7665c04-0011-4cad-a98a-5e516f4a994c" id="b7665c04-0011-4cad-a98a-5e516f4a994c-link">1</a></sup>&nbsp;:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><pre class="shiki light-plus" style="background-color: #FFFFFF" tabindex="0"><code><span class="line"><span style="color: #000000">{</span><span style="color: #0451A5">&quot;street&quot;</span><span style="color: #000000">:  </span><span style="color: #A31515">&quot;Fonslylaan&quot;</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;number&quot;</span><span style="color: #000000">:  </span><span style="color: #098658">20</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;zipcode&quot;</span><span style="color: #000000">: </span><span style="color: #098658">1060</span><span style="color: #000000">,  </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;city&quot;</span><span style="color: #000000">:    </span><span style="color: #A31515">&quot;Sint-Gillis&quot;</span><span style="color: #000000">,</span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;lat&quot;</span><span style="color: #000000">:     </span><span style="color: #098658">50.8358216</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;lon&quot;</span><span style="color: #000000">:     </span><span style="color: #098658">4.3386884</span><span style="color: #000000">}</span></span></code></pre></div>



<p>In een&nbsp;<a href="/geocode-welke-tool-voor-welke-behoefte/">vorig artikel</a> hebben we aangetoond dat er een aantal tools bestaan om deze bewerking uit te voeren en dat het, onder bepaalde omstandigheden, nodig is om over een on-site (on-premise) of lokale tool te beschikken. We zetten eerder al&nbsp;<a href="/geocodage-contourner-les-lacunes-dopenstreetmap-partie-2/">NominatimWrapper</a> in de kijker, een oplossing die we ontwikkeld hebben op basis van <a href="https://openstreetmap.org/">OpenStreetMap</a>.</p>



<p>In België beheert de federale overheidsdienst&nbsp;<a href="https://bosa.belgium.be/nl">“Strategie en Ondersteuning” (BOSA)</a>&nbsp;<a href="https://opendata.bosa.be/index.fr.html">BeSt Address</a>, de authentieke bron voor Belgische adressen. Ze zijn beschikbaar als open data in verschillende formaten. In dit artikel stellen gaan we dieper in op de volgende vraag: <em>is het mogelijk om een lokale geocoder op te stellen gebaseerd op deze gegevens</em>? Het antwoord vergt zekere nuance: Ja, maar&#8230;</p>



<p>Ten eerste stelt BOSA <a href="https://bosa.belgium.be/nl/services/best-address-services">een aantal webservices</a> ter beschikking maar met twee beperkingen:</p>



<ul class="wp-block-list">
<li>Deze zijn enkel beschikbaar voor overheidsdiensten, niet voor bedrijven of burgers.</li>



<li>Ze bieden geen ‘standaardisatie’: je moet de juiste schrijfwijze van een straat of (deel)gemeente kennen om het te gebruiken.</li>
</ul>



<h2 class="wp-block-heading">Pelias</h2>



<p>Met het opensourceproject&nbsp;<a href="https://pelias.io/">Pelias</a>&nbsp;kan een geocoder opgezet worden op basis van je eigen gegevens. In combinatie met <a href="https://openaddresses.io/">OpenAddresses.io</a>, een project dat open adresgegevens samenbrengt, is het mogelijk om Pelias in te zetten voor een reeks landen of steden, <a href="https://github.com/pelias/docker/tree/master/projects/belgium">waaronder België met BeSt Address (in combinatie met OpenStreetMap)</a>.</p>



<p>Hoewel het eenvoudig is om een geocoder op te zetten die Pelias en BeSt Address combineert en die goed lijkt te werken wanneer je hem test op een paar adressen, raak je al snel teleurgesteld wanneer je probeert naar een hogere versnelling te schakelen en hem datasets stuurt van de (Belgische) <a href="https://kbopub.economie.fgov.be/kbo-open-data/login?lang=nl">Kruispuntbank van Ondernemingen</a>, het <a href="https://employer-identification-consult.prd.pub.socialsecurity.be/">werkgeversrepertorium</a> (RSZ) of het rijksregister.</p>



<p>Met Pelias zijn er twee vraagmodi: gestructureerd ({“address”: “Fonsnylaan 20”, “postalcode”: 1060, “locality”: “Sint-Gillis”}) of ongestructureerd ({“query”: “Fonsnylaan 20, 1060 Sint-Gillis”}). Van de gegevens die we gestructureerd (cfr. “pelias_struct” in de grafiek hieronder) getest hebben (10 000 adressen afkomstig van verschillende bronnen in onderstaande legende), was Pelias slechts in staat om 55 % van de adressen exact te lokaliseren. Enkele percentages (1-2) zijn gelokaliseerd wat betreft de straat en in +/- 35% van de gevallen vond Pelias enkel de stad&#8230; met andere woorden niks bruikbaars. En in 7-10 % krijgen we zelfs geen enkel resultaat.&nbsp; &nbsp;</p>



<p>Pelias doet iets beter ‘ongestructureerd’ (pelias), aangezien hij bijna altijd in staat is om een resultaat te verschaffen, en 11 % bijkomende adressen worden exact gelokaliseerd.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rrn_10000.png"><img fetchpriority="high" decoding="async" width="1024" height="594" data-id="20335" src="/wp-content/uploads/2024/03/matching_rate_rrn_10000-1024x594.png" alt="" class="wp-image-20335" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000.png 1843w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Registre National</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rep_10000.png"><img decoding="async" width="1024" height="594" data-id="20334" src="/wp-content/uploads/2024/03/matching_rate_rep_10000-1024x594.png" alt="" class="wp-image-20334" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000.png 1843w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Répertoire des Employeurs</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_best_10000.png"><img decoding="async" width="1024" height="594" data-id="20332" src="/wp-content/uploads/2024/03/matching_rate_best_10000-1024x594.png" alt="" class="wp-image-20332" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000.png 1843w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">BeSt Addresses</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_kbo_10000.png"><img loading="lazy" decoding="async" width="1024" height="594" data-id="20333" src="/wp-content/uploads/2024/03/matching_rate_kbo_10000-1024x594.png" alt="" class="wp-image-20333" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000.png 1843w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Banque Carrefour des Entreprises</figcaption></figure>
</figure>



<p>Het is interessant om een paar zaken op te merken:</p>



<ul class="wp-block-list">
<li>Wanneer het resultaat niet exact is, bevat het resultaat geen gegevens van BeSt Address, maar van OpenStreetMap (niveau &#8216;street&#8217;) of WhosOnFirst (niveau &#8216;city&#8217;);</li>



<li>Soms geeft een adres geen resultaat in &#8216;gestructureerde&#8217; modus, maar wel in &#8216;ongestructureerde&#8217; modus, en omgekeerd;</li>



<li>In gestructureerde modus lijkt Pelias vaak in de war te raken door de aanwezigheid van de parameter ‘locality’ naast de ‘postalcode’. Vaak geeft een adres een resultaat op niveau ‘city’ wanneer deze parameter wordt opgegeven, maar een resultaat op niveau ‘building’ wanneer alleen de postcode wordt opgegeven (naast de straat en het nummer). Je kunt het verschil zien in de grafiek op de regel “pelias_struc_noloc”, waar het precies gelokaliseerde deel (‘building’, in groen) met bijna 25% toeneemt. Aan de andere kant verdwijnt het deel gelokaliseerd op stadsniveau, dat grotendeels gebaseerd is op dit ‘locality’-argument, zo goed als;</li>



<li>Het door Pelias geleverde resultaat bevat geen ‘BeSt id’ die het mogelijk zou maken om de unieke en authentieke identificatie van een adres te verkrijgen;</li>



<li>Noch de Franstalige adressen van de Vlaamse faciliteitengemeenten (en vice-versa), noch de Duitstalige adressen van de Oostkantons worden geïmporteerd.</li>
</ul>



<p>Maar op het moment van schrijven is er een nog groter probleem: de gegevens die Pelias gebruikt, dateren van midden 2021, om twee redenen:&nbsp;</p>



<ul class="wp-block-list">
<li>Het door OpenAddresses erkende formaat veranderde rond oktober 2021 en is niet langer compatibel met de door Bosa beschikbaar gestelde bestanden;</li>



<li>OpenAddresses veranderde zijn ‘dataflow’ midden 2021: de voorbereide gegevens werden eerst ter beschikking gesteld op het adres&nbsp;<a href="https://results.openaddresses.io/">https://results.openaddresses.io/</a> dat nog steeds beschikbaar is maar waarvan de gegevens niet meer up-to-date zijn; ze zijn wel up-to-date op&nbsp;<a href="https://batch.openaddresses.io/data">https://batch.openaddresses.io/data</a>. Pelias werd echter niet aangepast en blijft de gegevens van het oude systeem downloaden.</li>
</ul>



<h2 class="wp-block-heading">bePelias</h2>



<p>Het lijkt dus duidelijk dat Pelias in zijn huidige vorm geen serieuze kandidaat is voor een toepassing die geocodering van adressen in België vereist. Zowel de geïmporteerde gegevens (te oud, geen ID, geen gegevens op straatniveau als een nummer niet geïdentificeerd is) als de robuustheid ontbreken. Maar het leek ons dat het potentieel aanwezig was en we gingen aan de slag om het te verbeteren. Er waren twee mogelijkheden:&nbsp;</p>



<ul class="wp-block-list">
<li>Een &#8216;kloon&#8217; van Pelias maken door de code aan te passen. Met het risico om wijzigingen aan te brengen die niet compatibel zouden zijn met de toekomstige ontwikkelingen van Pelias, en een grote inspanning op het vlak van begrip en ontwikkeling;</li>



<li>Een ‘extra laag’ toevoegen, zoals we al met succes hebben gedaan met <a href="https://github.com/SmalsResearch/NominatimWrapper">NominatimWrapper</a>, om de tekortkomingen van Pelias te compenseren. Het is deze tweede optie die we hebben gekozen.</li>
</ul>



<p>Deze tool die we ‘<em>bePelias</em>’ hebben genoemd en die we open source ter beschikking stellen (<a href="https://github.com/SmalsResearch/bePelias">https://github.com/SmalsResearch/bePelias</a>) doet hoofdzakelijk twee dingen:</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2024/04/bepelias_archi.png"><img loading="lazy" decoding="async" width="672" height="381" src="/wp-content/uploads/2024/04/bepelias_archi.png" alt="" class="wp-image-20365" style="width:399px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/bepelias_archi.png 672w, https://www.smalsresearch.be/wp-content/uploads/2024/04/bepelias_archi-300x170.png 300w" sizes="auto, (max-width: 672px) 100vw, 672px" /></a></figure>



<ul class="wp-block-list">
<li>Een meer volledige voorbereiding van de ‘BeSt Address-’gegevens, inclusief een reeks aanvullende gegevens (adres- en straatidentificatienummers, NIS-codes voor gemeenten, enz.), die het meertalige aspect vervolledigen en identificatie op straatniveau mogelijk maken wanneer het nummer niet bekend is. We hebben Pelias ook geconfigureerd om interpolatie mogelijk te maken (ervan uitgaande dat de &#8216;8&#8217; van een straat, indien niet bekend, tussen de &#8216;6&#8217; en de &#8217;10&#8217; ligt).</li>



<li>Een tussenlaag tussen Pelias en de client, in de vorm van een REST API, om een reeks varianten van een adres uit te proberen. Een reeks combinaties van de volgende varianten wordt getest, totdat er één een bevredigend resultaat geeft:
<ul class="wp-block-list">
<li>Gestructureerde of ongestructureerde versie van de oproep tot Pelias;</li>



<li><span style="color: initial;">Met de lokaliteit (plaats), of alleen de postcode;</span></li>



<li><span style="color: initial;">Met een reeks reguliere expressies om de straat- of plaatsnaam op te schonen. Meestal zullen we alle tekst tussen haakjes verwijderen, wat heel gebruikelijk is in straatnamen om een opmerking of de naam van de deelgemeente te specificeren;</span></li>



<li>Door het huisnummer op te schonen, dat heel vaak ook een busnummer bevat, wat in de meeste gevallen de locatie niet verandert.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2024/04/transformers.png"><img loading="lazy" decoding="async" width="631" height="409" src="/wp-content/uploads/2024/04/transformers.png" alt="" class="wp-image-20360" style="width:487px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/transformers.png 631w, https://www.smalsresearch.be/wp-content/uploads/2024/04/transformers-300x194.png 300w" sizes="auto, (max-width: 631px) 100vw, 631px" /></a></figure>



<p>In de praktijk zien we dat de ‘basis’ gestructureerde versie (zonder opschoning of selectie) een resultaat geeft voor +/- 53 % van de adressen (voor KBO-gegevens, zie bijgevoegde figuur). Dit wordt gevolgd door 20 % na verwijdering van de lokaliteit, nog steeds in gestructureerde vorm, dan 11% in ongestructureerde vorm, 8% na opschoning in gestructureerde vorm, en dan een reeks andere combinaties voor een klein aantal adressen. Bijna alle combinaties zijn op een bepaald moment bruikbaar.</p>



<h2 class="wp-block-heading"><strong>Resultaten</strong></h2>



<p>Het resultaat is zichtbaar in onderstaande grafieken. De bePelias-oplossing is bijna net zo efficiënt als Here WeGo (here in de grafieken) of Microsofts Bing Maps (bing); beter dan Google Maps (google), dat vrij gevoelig is voor ruis in adressen, zoals tekst tussen haakjes, en NominatimWrapper, dat enkel de straten lokaliseert voor een groot deel van de adressen.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/04/matching_rate_rep_10000.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20449" src="/wp-content/uploads/2024/04/matching_rate_rep_10000-1024x587.png" alt="" class="wp-image-20449" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rrn_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20351" src="/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1024x587.png" alt="" class="wp-image-20351" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/04/matching_rate_best_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20358" src="/wp-content/uploads/2024/04/matching_rate_best_10000_2-1024x587.png" alt="" class="wp-image-20358" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_kbo_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20349" src="/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1024x587.png" alt="" class="wp-image-20349" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p>We hebben ook de nauwkeurigheid van de bePelias-resultaten getest met behulp van een &#8216;majority voting&#8217;-methodologie door dezelfde dataset naar verschillende geocoders te sturen. We presenteerden de resultaten in <a href="/webinar-geocoding-follow-up/">een recent webinar</a>, waaruit bleek dat de prestaties zeer vergelijkbaar zijn met die van Here WeGo of Bing Maps, en opnieuw aanzienlijk beter dan Google Maps, dat naast het feit dat het vaak alleen de straat lokaliseert, een vervelende neiging heeft om te hallucineren en resultaten biedt die duizenden kilometers verwijderd zijn van het juiste antwoord.</p>



<p>Wat snelheid betreft, geeft het feit dat de oplossing lokaal draait een aanzienlijk voordeel, namelijk twee keer zo snel als Google Maps of 5 keer zo snel als Bing Maps. Hiervoor moet de geocoder natuurlijk zo dicht mogelijk bij de toepassing die hem nodig heeft worden geïnstalleerd.</p>



<h2 class="wp-block-heading"><strong>Conclusies: tool bePelias</strong> </h2>



<p>Op basis van bovenstaande stellen wij een werkende oplossing, bePelias, ter beschikking, die je in staat stelt om lokaal een geocoder te instantiëren, met behulp van Docker, uitsluitend gebaseerd op open source code (Pelias) en open data (voornamelijk BeSt Address), met nauwelijks een paar duizend regels extra code in Python of Bash.</p>



<p>Onze oplossing heeft natuurlijk niet alleen maar voordelen:</p>



<ul class="wp-block-list">
<li>bePelias werkt alleen voor België;</li>



<li>bePelias werkt alleen voor adressen. Je krijgt geen antwoord op ‘Smals, Sint-Gillis’ of ‘Bakker, Namen’;</li>



<li>bePelias vereist de installatie, het beheer en het onderhoud (updaten van de server, bePelias en ‘BeSt Address’-gegevens) van een server met ongeveer 15 GB schijfruimte en minstens 8 GB RAM geheugen, wat, afhankelijk van het project, een hogere kost kan betekenen dan het gebruik van een commerciële <em>cloud</em>-oplossing;</li>



<li>In dit stadium is dit nog een onderzoeksproject dat zich moet bewijzen in een industriële omgeving.</li>
</ul>



<p>Daar staat tegenover dat:</p>



<ul class="wp-block-list">
<li>bePelias vergelijkbare prestaties biedt met de grote commerciële spelers in de sector;</li>



<li>bePelias on-premise werkt, wat de problemen van vertrouwelijkheid en GDPR oplost;</li>



<li>bePelias gebaseerd is op BeSt Address, de (recente) authentieke bron van adressen in België. Het verkrijgen van een ‘BeSt id’ maakt het gemakkelijker om te communiceren met een reeks webservices die deze bron hebben geïntegreerd.</li>
</ul>



<p>Feedback is zeer welkom en zal helpen om deze tool, die klaar staat om gebruikt te worden, te verbeteren!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<ol class="wp-block-footnotes"><li id="b7665c04-0011-4cad-a98a-5e516f4a994c">Dit is een vereenvoudigd illustratief voorbeeld, waarvan de syntaxis niet overeenkomt met een bekende tool. <a href="#b7665c04-0011-4cad-a98a-5e516f4a994c-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>


<p class="has-cyan-bluish-gray-color has-text-color has-link-color wp-elements-c41eb3572da4d9702c8d124766adb49c">Deze post is een individuele bijdrage van Vandy Berten, gespecialiseerd in data science bij Smals Research. Dit artikel is geschreven onder zijn eigen naam en weerspiegelt op geen enkele wijze de standpunten van Smals.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>bePelias, un géocodeur local basé sur BeSt Address</title>
		<link>https://www.smalsresearch.be/bepelias-un-geocodeur-local-base-sur-best-address/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Tue, 23 Apr 2024 07:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=20294</guid>

					<description><![CDATA[Le géocodage est l'opération qui permet de transformer une adresse postale textuelle ("av. Fonsny 20, 1060 Bruxelles") en une version décomposée et standardisée, associée à une localisation géographique]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/bepelias-een-lokale-geocoder-gebaseerd-op-best-address/" data-type="post" data-id="20443">Nederlandstalige versie</a></em></p>



<p>Le géocodage est l&#8217;opération qui permet de transformer une adresse postale textuelle (&#8220;av. Fonsny 20, 1060 Bruxelles&#8221;) en une version décomposée et standardisée, associée à une localisation géographique<sup data-fn="b7665c04-0011-4cad-a98a-5e516f4a994c" class="fn"><a href="#b7665c04-0011-4cad-a98a-5e516f4a994c" id="b7665c04-0011-4cad-a98a-5e516f4a994c-link">1</a></sup>&nbsp;:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><pre class="shiki light-plus" style="background-color: #FFFFFF" tabindex="0"><code><span class="line"><span style="color: #000000">{</span><span style="color: #0451A5">&quot;street&quot;</span><span style="color: #000000">:  </span><span style="color: #A31515">&quot;Avenue Fonsny&quot;</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;number&quot;</span><span style="color: #000000">:  </span><span style="color: #098658">20</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;zipcode&quot;</span><span style="color: #000000">: </span><span style="color: #098658">1060</span><span style="color: #000000">,  </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;city&quot;</span><span style="color: #000000">:    </span><span style="color: #A31515">&quot;Saint-Gilles&quot;</span><span style="color: #000000">,</span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;lat&quot;</span><span style="color: #000000">:     </span><span style="color: #098658">50.8358216</span><span style="color: #000000">, </span></span>
<span class="line"><span style="color: #000000"> </span><span style="color: #0451A5">&quot;lon&quot;</span><span style="color: #000000">:     </span><span style="color: #098658">4.3386884</span><span style="color: #000000">}</span></span></code></pre></div>



<p>Dans un <a href="/geocodage-quel-outil-pour-quel-besoin/">article précédent</a>, nous avons montré qu&#8217;il existe une série d&#8217;outils pour réaliser cette opération et que, dans certaines circonstances, il est nécessaire de disposer d&#8217;un outil sur site (on-premise), ou local. Nous avons déjà mis en avant <a href="/geocodage-contourner-les-lacunes-dopenstreetmap-partie-2/">NominatimWrapper</a>, une solution que nous avons développée, basée sur <a href="https://openstreetmap.org/">OpenStreetMap</a>.</p>



<p>En Belgique, le service public fédéral <a href="https://bosa.belgium.be/fr">&#8220;Stratégie et Appui&#8221; (BOSA)</a> gère <a href="https://opendata.bosa.be/index.fr.html">BeSt Address</a>, la source authentique des adresses belges. Elles sont disponibles en open data dans différents formats. Dans cet article, nous allons nous pencher sur la question suivante&nbsp;: <em>est-il possible de mettre en place un géocodeur local basé sur ces données</em>&nbsp;? La réponse nécessite une certaine nuance&nbsp;: Oui, mais&#8230;</p>



<p>Précisons d&#8217;abord que BOSA met à disposition <a href="https://bosa.belgium.be/fr/services/best-address-services">une série de web services</a>, mais avec deux limitations&nbsp;: </p>



<ul class="wp-block-list">
<li>Ceux-ci sont uniquement disponibles pour les services publics, pas pour les entreprises ou les citoyens ;</li>



<li>Ils n&#8217;offrent pas l&#8217;aspect &#8220;standardisation&#8221;&nbsp;: il est nécessaire de connaitre l&#8217;orthographe (quasi) exacte d&#8217;une rue ou d&#8217;une (sous-)commune pour l&#8217;utiliser. </li>
</ul>



<h2 class="wp-block-heading">Pelias</h2>



<p>Le projet open source <a href="https://pelias.io/">Pelias</a> permet de mettre en place un géocodeur basé sur ses propres données. En combinaison avec <a href="https://openaddresses.io/">OpenAddresses.io</a>, un projet rassemblant des données d&#8217;adresses ouvertes, il est possible de déployer Pelias pour une série de pays ou de villes, <a href="https://github.com/pelias/docker/tree/master/projects/belgium">dont la Belgique avec BeSt Address (en combinaison avec OpenStreetMap)</a>.</p>



<p>S&#8217;il est facile de mettre en place un géocodeur combinant Pelias et BeSt Address qui semble bien marcher quand on le teste sur quelques adresses, on déchante vite quand on tente de passer à la vitesse supérieure, en lui envoyant des ensembles de données venant de la <a href="https://kbopub.economie.fgov.be/kbo-open-data/login?lang=fr">Banque Carrefour des Entreprises</a> (belge), du <a href="https://employer-identification-consult.prd.pub.socialsecurity.be/">répertoire des employeurs</a> (ONSS) ou encore du registre national. </p>



<p>Pelias permet deux modes d&#8217;interrogation&nbsp;: structuré ({&#8220;address&#8221;: &#8220;Avenue Fonsnsy 20&#8221;, &#8220;postalcode&#8221;: 1060, &#8220;locality&#8221;: &#8220;Saint-Gilles&#8221;}) ou non structuré ({&#8220;query&#8221;: &#8220;Avenue Fonsnsy 20, 1060 Saint-Gilles&#8221;}). Sur les données que nous avons testées (10.000 adresses provenant de diverses sources en légende ci-dessous) en mode structuré (cf. &#8220;pelias_struct&#8221; dans le graphique ci-dessous), Pelias n&#8217;a été capable de localiser précisément que de l&#8217;ordre de 55 % des adresses. Quelques pour cents (1-2) sont localisés au niveau de la rue, et dans +/- 35 % des cas, Pelias n&#8217;a trouvé que la ville &#8230; autant dire, rien d&#8217;exploitable. Et dans 7-10 %, on ne reçoit même aucun résultat.&nbsp; &nbsp;</p>



<p>Pelias fait un petit peu mieux en mode &#8220;non-structuré&#8221; (pelias), puisqu&#8217;il sera presque toujours capable de fournir un résultat, et 11 % des adresses supplémentaires sont localisées précisément.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rrn_10000.png"><img loading="lazy" decoding="async" width="1024" height="594" data-id="20335" src="/wp-content/uploads/2024/03/matching_rate_rrn_10000-1024x594.png" alt="" class="wp-image-20335" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000.png 1843w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Registre National</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rep_10000.png"><img loading="lazy" decoding="async" width="1024" height="594" data-id="20334" src="/wp-content/uploads/2024/03/matching_rate_rep_10000-1024x594.png" alt="" class="wp-image-20334" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rep_10000.png 1843w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Répertoire des Employeurs</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_best_10000.png"><img loading="lazy" decoding="async" width="1024" height="594" data-id="20332" src="/wp-content/uploads/2024/03/matching_rate_best_10000-1024x594.png" alt="" class="wp-image-20332" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_best_10000.png 1843w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">BeSt Addresses</figcaption></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_kbo_10000.png"><img loading="lazy" decoding="async" width="1024" height="594" data-id="20333" src="/wp-content/uploads/2024/03/matching_rate_kbo_10000-1024x594.png" alt="" class="wp-image-20333" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-1024x594.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-300x174.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-768x445.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000-1536x891.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000.png 1843w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Banque Carrefour des Entreprises</figcaption></figure>
</figure>



<p>Il est intéressant de remarquer quelques éléments&nbsp;: </p>



<ul class="wp-block-list">
<li>Quand le résultat n&#8217;est pas précis, le résultat ne contient pas de données provenant de BeSt Address, mais d&#8217;OpenStreetMap (niveau &#8220;street&#8221;) ou WhosOnFirst (niveau &#8220;city&#8221;) ;</li>



<li>Il arrive qu&#8217;une adresse ne donne pas de résultat en mode &#8220;structuré&#8221;, mais en donne en &#8220;non-structuré&#8221;, et vice-versa ;</li>



<li>En mode structuré, Pelias semble fréquemment perturbé par la présence du paramètre &#8220;locality&#8221; en addition du &#8220;postalcode&#8221;. Souvent, une adresse donne un résultat de niveau &#8220;city&#8221; quand on lui fournit ce paramètre, mais de niveau &#8220;building&#8221; quand on lui fournit uniquement le code postal (en plus de la rue et du numéro). On peut voir la différence dans le graphique sur la ligne &#8220;pelias_struc_noloc&#8221;, où la partie localisée précisément (&#8220;building&#8221;, en vert) augmente de près de 25 %. En contrepartie, la partie localisée au niveau de la ville, grandement basée sur cet argument &#8220;locality&#8221;, disparaît quasiment ;</li>



<li>Le résultat fourni par Pelias ne contient pas de &#8220;BeSt id&#8221;, qui permettrait d&#8217;obtenir l&#8217;identifiant unique et authentique d&#8217;une adresse ;</li>



<li>Ni les adresses en français des communes flamandes à facilités (et vice-versa) ni les adresses germanophones des cantons de l&#8217;Est ne sont importées.</li>
</ul>



<p>Mais il y a à l&#8217;heure d&#8217;écrire ces lignes un problème encore plus important&nbsp;: les données utilisées par Pelias datent de mi-2021, et ce pour deux raisons&nbsp;:&nbsp;</p>



<ul class="wp-block-list">
<li>Le format reconnu par OpenAddresses a changé vers octobre 2021 et n&#8217;est plus compatible avec les fichiers mis à disposition par Bosa ;</li>



<li>OpenAddresses a changé son flux de données mi-2021&nbsp;: au préalable, les données préparées étaient mises à disposition à l&#8217;adresse <a href="https://results.openaddresses.io/">https://results.openaddresses.io/</a>, qui est toujours disponible mais dont les données ne sont plus mises à jour ; elles le sont maintenant sur <a href="https://batch.openaddresses.io/data">https://batch.openaddresses.io/data</a>. Mais Pelias n&#8217;a pas été adapté et continue à télécharger les données sur l&#8217;ancien système.</li>
</ul>



<h2 class="wp-block-heading">bePelias</h2>



<p>Il semble donc assez clair que Pelias n&#8217;est en l&#8217;état, pas un candidat sérieux pour une application nécessitant de géocoder des adresses en Belgique. Tant les données importées (trop anciennes, sans ID, sans données au niveau des rues si un numéro n&#8217;est pas identifié) que la robustesse font défaut. Mais il nous semblait que le potentiel était là et avons cherché à l&#8217;améliorer. Il y avait deux pistes&nbsp;:&nbsp;</p>



<ul class="wp-block-list">
<li>Créer un &#8220;clone&#8221; de Pelias, en modifiant son code. Avec le risque de faire des changements qui ne soient pas compatibles avec les futures évolutions de Pelias, et un effort de compréhension et de développement important ;</li>



<li>Rajouter une &#8220;sur-couche&#8221;, comme nous l&#8217;avons déjà fait avec succès dans <a href="https://github.com/SmalsResearch/NominatimWrapper">NominatimWrapper</a>, pour pallier les défaut de Pelias. C&#8217;est cette seconde voie que nous avons choisie.</li>
</ul>



<p>Cet outil, que nous avons appelé &#8220;<em>bePelias</em>&#8221; et que nous mettons à disposition en open source (<a href="https://github.com/SmalsResearch/bePelias">https://github.com/SmalsResearch/bePelias</a>), fait principalement deux choses&nbsp;:</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2024/04/bepelias_archi.png"><img loading="lazy" decoding="async" width="672" height="381" src="/wp-content/uploads/2024/04/bepelias_archi.png" alt="" class="wp-image-20365" style="width:399px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/bepelias_archi.png 672w, https://www.smalsresearch.be/wp-content/uploads/2024/04/bepelias_archi-300x170.png 300w" sizes="auto, (max-width: 672px) 100vw, 672px" /></a></figure>



<ul class="wp-block-list">
<li>Une préparation plus complète des données de BeSt Address, incluant une série de données additionnelles (id des adresses, des rues, codes NIS des communes&#8230;), complétant l&#8217;aspect multilingue et permettant l&#8217;identification au niveau de la rue quand le numéro n&#8217;est pas connu. Nous avons par ailleurs configuré Pelias pour permettre l&#8217;interpolation (supposant que le &#8220;8&#8221; d&#8217;une rue, s&#8217;il n&#8217;est pas connu, se situe entre le &#8220;6&#8221; et le &#8220;10&#8221;).</li>



<li>Une couche intermédiaire entre Pelias et le client, sous forme de REST API, pour tenter une série de variantes d&#8217;une adresse. On testera une série de combinaisons des variantes suivantes, jusqu&#8217;à ce qu&#8217;une donne un résultat satisfaisant&nbsp;: 
<ul class="wp-block-list">
<li>Version structurée ou non-structurée de l&#8217;appel à Pelias ;</li>



<li>Avec la localité, ou uniquement le code postal ;</li>



<li>En nettoyant, avec une série d&#8217;expressions régulières, le nom de rue ou de localité. Typiquement, on enlèvera tout texte entre parenthèses, très fréquent dans les noms de rue pour préciser un commentaire ou le nom de la sous-commune ;</li>



<li>En nettoyant le numéro de maison, qui contient très souvent également un numéro de boite, ce qui ne change pas la localisation dans la plupart des cas.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image alignleft size-full is-resized"><a href="/wp-content/uploads/2024/04/transformers.png"><img loading="lazy" decoding="async" width="631" height="409" src="/wp-content/uploads/2024/04/transformers.png" alt="" class="wp-image-20360" style="width:487px;height:auto" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/transformers.png 631w, https://www.smalsresearch.be/wp-content/uploads/2024/04/transformers-300x194.png 300w" sizes="auto, (max-width: 631px) 100vw, 631px" /></a></figure>



<p>Dans la pratique, on constate que la version structurée &#8220;de base&#8221; (sans nettoyage ou sélection) donne un résultat dans +/- 50 % des adresses (pour les données KBO, cf. figure ci-jointe). Viennent ensuite 20 % après suppression de la localité, toujours en structuré, puis 11 % en non structuré, 8 % après nettoyage en structuré, puis une série d&#8217;autres combinaisons pour un petit nombre d&#8217;adresses. Quasiment toutes les combinaisons sont utiles à un moment.</p>



<h2 class="wp-block-heading">Résultats</h2>



<p>Le résultat est visible dans les graphiques ci-dessous. La solution bePelias est quasiment aussi efficace que Here WeGo (here dans les graphiques) ou Bing Maps de Microsoft (bing); meilleure que Google Maps (google), qui s&#8217;avère assez sensible au bruit dans les adresses, comme du texte entre parenthèse, ainsi que NominatimWrapper, qui localise uniquement les rues d&#8217;une grande proportion d&#8217;adresses.</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/04/matching_rate_rep_10000.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20449" src="/wp-content/uploads/2024/04/matching_rate_rep_10000-1024x587.png" alt="" class="wp-image-20449" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_rep_10000.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_rrn_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20351" src="/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1024x587.png" alt="" class="wp-image-20351" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_rrn_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/04/matching_rate_best_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20358" src="/wp-content/uploads/2024/04/matching_rate_best_10000_2-1024x587.png" alt="" class="wp-image-20358" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/04/matching_rate_best_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/03/matching_rate_kbo_10000_2.png"><img loading="lazy" decoding="async" width="1024" height="587" data-id="20349" src="/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1024x587.png" alt="" class="wp-image-20349" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1024x587.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-300x172.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-768x440.png 768w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2-1536x880.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2024/03/matching_rate_kbo_10000_2.png 1866w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>



<p>Nous avons également testé l&#8217;exactitude des résultats de bePelias selon une méthodologie de vote par majorité en envoyant un même ensemble de données à plusieurs géocodeurs. Nous avons présenté les résultats lors d&#8217;<a href="/webinar-geocoding-follow-up/">un récent webinaire</a>, qui nous montrent des performances très proches de Here WeGo ou Bing Maps, et, à nouveau, sensiblement meilleures que Google Maps, qui outre le fait qu&#8217;il ne situe fréquemment que la rue, a une fâcheuse à l&#8217;hallucination, en proposant des résultats à des milliers de kilomètres de la bonne réponse.</p>



<p>En termes de vitesse, le fait que la solution soit sur site lui donne un avantage non-négligeable, en étant deux fois plus rapide que Google Maps ou 5 fois que Bing Maps. Ceci nécessitera bien sûr d&#8217;installer le géocodeur au plus près de l&#8217;application qui en a besoin.</p>



<h2 class="wp-block-heading">Conclusions&nbsp;: outil bePelias</h2>



<p>Sur base de ce qui précède, nous proposons une solution fonctionnelle, bePelias, qui permet d&#8217;instancier un géocodeur localement. Ceci se fait à l&#8217;aide de Docker, est basé uniquement sur du code source ouvert (Pelias) et de données ouvertes (principalement BeSt Address), avec à peine un gros milliers de lignes de code additionnel en Python ou Bash.</p>



<p>Elle n&#8217;a bien sûr pas que des avantages&nbsp;:</p>



<ul class="wp-block-list">
<li>Elle ne marche que pour la Belgique ;</li>



<li>Elle ne marche que pour des adresses. Vous n&#8217;aurez pas de réponse à &#8220;Smals, Saint-Gilles&#8221;, ou &#8220;Boulangerie, Namur&#8221; ;</li>



<li>Elle nécessite la mise en place, la gestion et la maintenance (mise à jour du serveur, de bePelias et des données de BeSt Address) d&#8217;un serveur avec une quinzaine de GB de disque et au moins 8 GB de mémoire RAM, ce qui, en fonction du projet, peut représenter un coût supérieur à l&#8217;utilisation d&#8217;une solution <em>cloud</em> commerciale ;</li>



<li>Il s&#8217;agit encore à ce stade d&#8217;un projet de recherche qui doit faire ses preuves dans un environnement industriel.</li>
</ul>



<p>Mais en contrepartie&nbsp;:</p>



<ul class="wp-block-list">
<li>Elle offre des performances comparables aux grands acteurs commerciaux du secteur ;</li>



<li>Elle est on-premise, ce qui règle des problèmes de confidentialité ou liés aux RGPD ;</li>



<li>Elle est basée sur BeSt Address, c&#8217;est-à-dire la (récente) source authentique des adresses en Belgique. L&#8217;obtention d&#8217;un &#8220;BeSt id&#8221; permettra d&#8217;interagir plus facilement avec une série de webservices qui auront intégré cette source.</li>
</ul>



<p>Des retours d&#8217;expérience sont bienvenus et aideront à faire progresser cet outil qui ne demande qu&#8217;à être utilisé&nbsp;!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<ol class="wp-block-footnotes"><li id="b7665c04-0011-4cad-a98a-5e516f4a994c">Il s&#8217;agit d&#8217;un exemple illustratif simplifié, dont la syntaxe ne correspond à aucun outil connu. <a href="#b7665c04-0011-4cad-a98a-5e516f4a994c-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>


<p><span style="color: #999999;"><em>Ce post est une contribution individuelle de Vandy Berten, spécialisé&nbsp;</em>en<em>&nbsp;data science&nbsp;chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></span></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Géocodage&#160;: quels outils pour quels besoins&#160;?</title>
		<link>https://www.smalsresearch.be/geocodage-quels-outils-pour-quels-besoins/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Thu, 28 Sep 2023 14:27:49 +0000</pubDate>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[geocoding]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/geocodage-quels-outils-pour-quels-besoins/</guid>

					<description><![CDATA[Comment placer une adresse sur une carte gr&#226;ce au g&#233;ocodage&#160;? Le g&#233;ocodage est l&#8217;op&#233;ration qui permet, &#224; partir d&#8217;une adresse postale, de la standardiser et d&#8217;en obtenir les coordonn&#233;es g&#233;ographiques. Nous verrons que cette op&#233;ration, que nous r&#233;alisons inconsciemment tous les jours dans notre GPS ou en cherchant une adresse sur Google Maps ou autre [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Comment placer une adresse sur une carte gr&acirc;ce au g&eacute;ocodage&nbsp;?</p><p>Le g&eacute;ocodage est l&#8217;op&eacute;ration qui permet, &agrave; partir d&#8217;une adresse postale, de la standardiser et d&#8217;en obtenir les coordonn&eacute;es g&eacute;ographiques. Nous verrons que cette op&eacute;ration, que nous r&eacute;alisons inconsciemment tous les jours dans notre GPS ou en cherchant une adresse sur Google Maps ou autre outil cartographique, n&eacute;cessite en fait une machinerie complexe. Pour en exploiter les capacit&eacute;s au maximum, une certaine compr&eacute;hension sera n&eacute;cessaire.</p><p>Durant ce webinaire, essentiellement pratique, nous r&eacute;pondrons &agrave; un certain nombre de questions. Qu&rsquo;est-ce que le g&eacute;ocodage&nbsp;? &Agrave; quoi sert-il&nbsp;? Comment s&rsquo;en servir et quels sont les outils permettant de le faire&nbsp;? Quels sont les avantages et inconv&eacute;nients des diff&eacute;rentes solutions, qu&rsquo;elles soient commerciales ou open source, on-premise, authentiques, et comment peut-on comparer deux outils&nbsp;? Nous comparerons plusieurs solutions disponibles sur le march&eacute; (commerciales ou libres), ainsi que plusieurs am&eacute;liorations de solutions existantes, dont <a href="https://www.ict-reuse.be/fr/service/geocodage-avec-nominatim-ameliore">NominatimWrapper</a>, un outil d&eacute;velopp&eacute; par Smals Research, qui est bas&eacute; sur le projet collaboratif open-source OpenStreetMap.</p><p>Ce webinaire fait suite au webinaire &#8220;<a href="/webinar-gis-analytics-follow-up/">GIS Analytics&nbsp;: Quel potentiel pour les donn&eacute;es g&eacute;ographiques&nbsp;?</a>&#8221; du 5 mai 2022. Il n&#8217;est cependant pas un pr&eacute;requis. Aucun pr&eacute;requis n&#8217;est par ailleurs n&eacute;cessaire pour suivre le webinaire.
</p><ul>
 	<li style="list-style-type: none">



<hr class="wp-block-separator has-alpha-channel-opacity">


<p></p>
</li>
</ul><p>
Hoe plaats je een adres op een kaart met behulp van geocodering?
Geocodering is de handeling die toelaat om een postadres te standaardiseren en om er de geografische co&ouml;rdinaten van te verkrijgen. We zullen zien dat deze handeling, die we elke dag onbewust uitvoeren in onze gps of bij het zoeken naar een adres op Google Maps of in een andere mappingstool, eigenlijk een complex proces vereist. Om de mogelijkheden ervan optimaal te benutten, is een zekere mate van begrip nodig.</p><p>Tijdens dit voornamelijk praktische webinar beantwoorden we een aantal vragen. Wat is geocodering? Waartoe dient het? Hoe kan het worden gebruikt en met welke tools? Wat zijn de voor- en nadelen van de verschillende oplossingen, commercieel of opensource, on-premise of authentiek, en hoe kunnen we twee tools met elkaar vergelijken? We zullen verschillende bestaande oplossingen vergelijken (zowel commercieel als opensource), evenals verschillende verbeteringen van bestaande oplossingen, waaronder&nbsp;<a href="https://www.ict-reuse.be/nl/service/geocode-met-verbeterde-nominatim" target="_blank" rel="noopener">NominatimWrapper</a>, een tool ontwikkeld door Smals Research op basis van het opensource samenwerkingsproject OpenStreetMap.</p><p>Dit webinar volgt op het webinar &#8220;<a title="/webinar-gis-analytics-follow-up/" href="/webinar-gis-analytics-follow-up/" target="_blank" rel="noopener">GIS Analytics: Welk potentieel voor geografische gegevens?</a>&rdquo; van 5 mei 2022. Deelname aan het vorige webinar is echter geen vereiste. Er zijn ook geen vereisten om het webinar te volgen.</p>







                <h1 class="wp-block-heading">Presentation</h1>
            
            


            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2023/09/2023-09-28-Webinar-Geocoding.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of 2023-09-28-Webinar-Geocoding."></object>
                <a id="wp-block-file--media-7c90544e-837d-4c6a-8f8f-4192cb4ca484" href="https://www.smalsresearch.be/wp-content/uploads/2023/09/2023-09-28-Webinar-Geocoding.pdf">2023-09-28-Webinar-Geocoding</a><a href="https://www.smalsresearch.be/wp-content/uploads/2023/09/2023-09-28-Webinar-Geocoding.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-7c90544e-837d-4c6a-8f8f-4192cb4ca484">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Geocodering: welke tool voor welke behoefte?</title>
		<link>https://www.smalsresearch.be/geocode-welke-tool-voor-welke-behoefte/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Fri, 23 Jun 2023 13:12:39 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=18710</guid>

					<description><![CDATA[Om een adres te kunnen plaatsen op een kaart, om een reisweg uit te stippelen of om alle winkels in een bepaalde wijk te bepalen, moet er eerst een belangrijke stap genomen worden: geocodering. Deze handeling houdt in dat een postadres zoals "Av. Fonsny 20, 1060 Bruxelles" enerzijds "gestandaardiseerd" kan worden (bordeaux gedeelte van onderstaande afbeelding), en anderzijds dat deze geografische coördinaten toegewezen krijgt ("location" in de afbeelding).]]></description>
										<content:encoded><![CDATA[<p><em><a href="/geocodage-quel-outil-pour-quel-besoin/">Version en français</a></em></p>
<p>Om een adres te kunnen plaatsen op een kaart, om een reisweg uit te stippelen of om alle winkels in een bepaalde wijk te bepalen, moet er eerst een belangrijke stap genomen worden: geocodering. Deze handeling houdt in dat een postadres zoals &#8220;Av. Fonsny 20, 1060 Bruxelles&#8221; enerzijds &#8220;gestandaardiseerd&#8221; kan worden (bordeaux gedeelte van onderstaande afbeelding), en anderzijds dat deze geografische coördinaten toegewezen krijgt (&#8220;location&#8221; in de afbeelding).  </p>


<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2023/05/2023-05-22_15h03_49.png"><img loading="lazy" decoding="async" width="1024" height="390" src="/wp-content/uploads/2023/05/2023-05-22_15h03_49-1024x390.png" alt="" class="wp-image-18590" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-1024x390.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-300x114.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-768x292.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49.png 1335w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>


<p>De standaardisering zal voor een juiste opsplitsing in componenten zorgen van het adres en ook een correctie (&#8220;Av.&#8221; in &#8220;Avenue&#8221;, &#8220;1060 Bruxelles&#8221; in &#8220;1060 Saint-Gilles&#8221;). Er zullen ook niet-relevante elementen voor de geocodering kunnen geschrapt worden, zoals het grijze schuingedrukte gedeelte in &#8220;Av. Fonsny <span style="color: #999999;">20 bte 5 (tegenover het station)</span>&#8220;. Deze stap komt eigenlijk neer op het maken van een correspondentie tussen een ingevoerd adres en de repository waarin elke gestructureerd adres verbonden is met zijn geografische coördinaten. Deze standaardisering maakt dus integraal deel uit van het geocodeproces en is nodig.</p>
<p>De omgekeerde handeling, het vragen naar alle bestaande adressen binnen een bepaalde omtrek van een punt, heet &#8220;reverse geocoding&#8221;.</p>
<p>Geocodering kan gedaan worden met OpenStreetMap door de volgende url op te roepen:</p>
<p><a href="https://nominatim.openstreetmap.org/?q=Av.+fonsny+20,+1060+Bruxelles&amp;format=jsonv2">https://nominatim.openstreetmap.org/?q=Av.+fonsny+20,+1060+Bruxelles&amp;format=jsonv2</a></p>
<p>De &#8220;reverse&#8221; correspondant kan via volgend adres bekomen worden&nbsp;:</p>
<p><a href="https://nominatim.openstreetmap.org/reverse?lat=50.83586776&amp;lon=4.3385087&amp;format=jsonv2">https://nominatim.openstreetmap.org/reverse?lat=50.83586776&amp;lon=4.3385087&amp;format=jsonv2</a></p>
<h1>Tools</h1>
<p>Deze handeling gebeurt normaal gezien via een API die ter beschikking gesteld wordt door een server. Er bestaan talrijke oplossingen en de keuze zal sterk afhangen van de antwoorden op de verschillende vragen die we verder gaan vermelden. We zullen ons richten op geocode van adressen in België, maar behalve enkele specifieke elementen, zullen de vragen algemeen zijn.</p>
<p>We hebben een aantal al dan niet commerciële tools uitgebreid bestudeerd:&nbsp;</p>
<ul>
<li>Commercieel (Cloud)&nbsp;:
<ul>
<li><a href="https://developers.google.com/maps/documentation/geocoding/overview">Google Maps</a></li>
<li><a href="https://learn.microsoft.com/en-us/bingmaps/rest-services/">Bing Maps</a></li>
<li><a href="https://developer.here.com/documentation/geocoding-search-api/dev_guide/index.html">Here</a></li>
<li><a href="https://developer.tomtom.com/geocoding-api/documentation/geocode">TomTom</a></li>
<li><a href="https://docs.mapbox.com/api/search/geocoding/">Mapbox</a></li>
</ul>
</li>
<li>Niet-commercieel (on premise)&nbsp;:
<ul>
<li><a href="https://nominatim.org/release-docs/latest/api/Overview/">Nominatim</a> (OpenStreetMap), &#8220;<a href="https://github.com/mediagis/nominatim-docker/tree/master/4.2">lokaal gedockte</a>&#8221; versie</li>
<li><a href="https://github.com/SmalsResearch/NominatimWrapper/">NominatimWrapper</a>, een oplossing die we ontwikkeld hebben om bepaalde lacunes van Nominatim op te vullen</li>
<li><a href="https://pelias.io/">Pelias</a>, door er data van <a href="https://opendata.bosa.be/index.fr.html">BestAddress</a> op te laden (authentieke bron van adressen in België) en van OpenStreetMap</li>
</ul>
</li>
</ul>
<p>We hebben overigens in &#8220;avant-première&#8221; de <a href="https://bosa.belgium.be/fr/services/best-address-services">API van BestAddress</a>, bestudeerd die niet publiek beschikbaar is. Merk op dat meerdere grote actoren voor GIS-oplossingen ook gerichte oplossingen kunnen bieden, al dan niet (semi-)on-premise. We hebben deze pistes nog niet verder uitgezocht. Ze vereisen complexe commerciële stappen met deze ondernemingen..</p>
<h1>Cloud vs on-premise</h1>
<p>Een eerste vraag die we ons stellen is of we een commerciële API kunnen gebruiken die ‘enkel’ moet opgeroepen worden, of dat het nodig is om een &#8220;on-premise&#8221; geocoder te beheren en installeren binnen de infrastructuur van de onderneming of administratie.</p>
<p>Het voordeel van een commerciële Cloud-oplossing (Google Maps, Here, Bing, &#8230;) is het beheersgemak en gebrek aan infrastructuurkosten. Deze oplossingen zijn in het algemeen ook van goede kwaliteit en bieden een wereldwijde dekking. Er zal echter rekening gehouden moeten worden met kosten per oproep, wat problematisch kan worden voor grote volumes. Vaak wordt er echter een gratis aantal oproepen voorgesteld (40 000/maand voor Google Maps, 30 000/maand voor Here, &#8230;)</p>
<p>Dankzij de on-premise oplossingen kan beantwoord worden aan hogere eisen op het vlak van vertrouwelijkheid of naleving van de GDPR-regelgeving. Ze zullen in het algemeen ook vlugger zijn als het datavolume groter is. Er zal echter rekening gehouden moeten worden met hogere infrastructuur- en beheerskosten, en een wereldwijde dekking zal moeilijk te realiseren zijn, tenzij we beschikken over meerdere terabytes aan gegevens die aan het product gewijd kunnen worden.</p>
<table style="width: 100%; height: 544px;" width="990">
<tbody>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">&nbsp;</td>
<td style="height: 68px;" width="277">
<p><b>Cloud solutions</b></p>
</td>
<td style="height: 68px;" width="330">
<p><b>On-premise</b><b> solutions</b></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>In te voeren complexiteit</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Infrakosten</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>GDPR, Vertrouwelijkheid</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Kosten voor grote volumes (tijd, €)</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Internettoegang</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Kwaliteit</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff6600;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f610.png" alt="😐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Wereldwijde dekking</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
</tbody>
</table>
<h1>Nauwkeurigheidsniveau</h1>
<p>De eis van nauwkeurigheid, d.w.z. de noodzaak dat het adres zich precies op de juiste plaats bevindt, zal niet dezelfde zijn als het doel is om globale statistieken op te stellen, om uit te zoeken in welke wijk een adres zich bevindt, welke bezorger of inspecteur het in zijn ronde moet opnemen, als wanneer het doel is om een noodhulpteam uit te sturen. In de eerste situaties zullen we accepteren dat bijvoorbeeld een bepaald deel van de adressen zich op straatniveau bevindt en niet op het niveau van een specifiek gebouw.</p>
<h1>Structurering van adressen</h1>
<p>De meeste geocoders aanvaarden als invoer ofwel een gestructureerd adres (straat= &#8220;Av. Fonsny&#8221;, nummer=&#8221;20&#8243;&#8230;) ofwel een niet-gestructureerd adres (adres=&#8221;Av. Fonsny 20, 1060 St-Gilles&#8221;). Maar sommige vereisen dat het adres gestructureerd is, wat voor problemen kan zorgen als we er niet in die vorm over beschikken of wanneer ze verkeerd opgesplitst worden (straat=&#8221;Av. Fonsny 20&#8243;, nummer=&#8221;&#8221;).</p>
<h1>Authentieke bron</h1>
<p>Eenzelfde adres kan meerdere schrijfwijzes hebben afhankelijk van de bron. Zo zijn er in Brussel twee straten genoemd (in het Frans) naar de gemeente &#8220;Tervuren&#8221; (een steenweg in Oudergem, een laan in Etterbeek, Oudergem en Sint-Pieters-Woluwe):</p>
<ul>
<li>Volgens Bing bestaat er &#8220;chaussée de Ter<strong>vur</strong>en&#8221; en &#8220;avenue de Ter<strong>vuer</strong>en&#8221; ;</li>
<li>Volgens Google Maps of OpenStreetMap, bestaat er &#8220;chaussée de Ter<strong>vuer</strong>en&#8221; en &#8220;avenue de Ter<strong>vuer</strong>en&#8221; ;</li>
<li>Volgens BestAddress is er &#8220;Ter<strong>vuer</strong>en&#8221; in Etterbeek en Sint-Pieters-Woluwe, maar &#8220;chaussée&#8221; en &#8220;avenue de Ter<strong>vur</strong>en&#8221; in Ouderghem ;</li>
<li>Volgens het rijksregister gaat het altijd om Ter<strong>vue</strong>ren.</li>
</ul>
<p>Afhankelijk van de context kan het belangrijk zijn om altijd de formulering te bekomen die overeenstemt met een precieze bron. Bijvoorbeeld omdat we per se een versie nodig hebben die bekend is bij een authentieke bron. Of, in het geval van geografische coördinaten, omdat je het gaat weergeven op een achtergrondkaart en je zo consistent mogelijk wilt zijn. Het plaatsen van een adres dat geocodeerd is met OpenStreetMap op een kaart van Google Maps kan in sommige gevallen een kleine afwijking veroorzaken.</p>
<p>Als je gegevens moet verkrijgen van BestAddress (in België), zijn er momenteel drie belangrijke opties:</p>
<ul>
<li>De &#8220;officiële&#8221; API aangeboden door Bosa (momenteel alleen in de testfase)</li>
<li>In lokale installatie, Pelias met de BestAddress-dataset</li>
<li><a href="https://phacochr.github.io/phacochr/">Phacochr</a> (cfr. hieronder), enkel in batchmodus, zonder API.</li>
</ul>
<p>Merk ook op dat er een <a href="https://loc.geopunt.be/">API bestaat verschaft door &#8220;geopunt.be&#8221;</a>, specifiek voor de Belgische adressen in Vlaanderen en Brussel (in het Nederlands).</p>
<h1>Dekking</h1>
<p>Een van de voordelen van Cloud-oplossingen is dat je een adres in Brussel, New York en Taipei tegelijk kunt geocoderen. Hetzelfde doen met een lokale oplossing kan onbetaalbaar veel ruimte in beslag nemen. Voor het (zeer kleine) België heeft OpenStreetMap (Nominatim) 30 GB schijfruimte nodig. Voor de hele wereld zouden meerdere terabytes nodig zijn, en meerdere weken om op te zetten.</p>
<p>Een installatie beperkt tot één land kan echter geschikt zijn voor een administratie die alleen adressen in haar eigen land moet beheren. Er zijn ook hybride mogelijkheden: het is mogelijk om Nominatim te configureren om volledige geocodering aan te bieden voor een selectie van landen, en zich te beperken tot lokalisatie en opschoning op stadsniveau voor de rest van de wereld.</p>
<h1>Behoefte aan een API</h1>
<p>We hebben ons gericht op API&#8217;s, d.w.z. &#8220;technische&#8221; interfaces die de functionaliteit bieden om adressen één voor één te geocoderen. Dit maakt het mogelijk om deze functionaliteit te integreren in een toepassing of een geautomatiseerd datamanagementproces. In sommige gevallen heb je echter een bestand met adressen die je manueel wilt geocoderen vóór een specifieke analyse. Er zijn een aantal tools beschikbaar voor dit doel, zoals <a href="https://www.geoapify.com/tools/geocoding-online">GeoApify</a>, of, voor Belgische adressen met BestAddress-gegevens, Phacochr (<a href="https://phacochr.github.io/phacochr">in een R-script</a>, ou <a href="https://phacochr.github.io/phacochr/articles/shiny_app.html">met de webversie</a>)</p>
<h1>Performantie</h1>
<p>Het is niet voldoende om een oplossing te hebben die aan de bovenstaande criteria voldoet. Het moet ook de juiste performanties leveren. Er moet zeker rekening worden gehouden met het aspect &#8216;snelheid&#8217;, maar we zijn hier vooral geïnteresseerd in &#8220;robuustheid&#8221;, d.w.z. de mogelijkheid om een (nauwkeurig) resultaat te bieden voor het grootste aantal adressen. Voor een reeks steekproeven van Belgische adressen uit verschillende bronnen (officiële en niet-officiële) hebben we een aantal tests uitgevoerd. In de grafieken hieronder staat het blauwe deel voor het aandeel adressen dat de API nauwkeurig kon lokaliseren (op gebouwniveau). In oranje werd de straat gevonden, maar niet het exacte nummer. In groen kon alleen de plaats worden gelokaliseerd.</p>
<p>De steekproeven van elk 1000 adressen komen uit de volgende bronnen (allemaal Belgische):&nbsp;&nbsp;</p>
<ul>
<li>kbo&nbsp;: Kruispuntbank van de Ondernemingen</li>
<li>rep&nbsp;: Werkgeversrepertorium</li>
<li>rrn&nbsp;: Rijksregister</li>
<li>best&nbsp;: BestAddress (Bosa)</li>
<li>resto&nbsp;: de site resto.be</li>
</ul>


<figure class="wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_rrn_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18690" src="/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1024x544.png" alt="" class="wp-image-18690" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_best_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18692" src="/wp-content/uploads/2023/06/matching_rate_best_1000-2-1024x544.png" alt="" class="wp-image-18692" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_kbo_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18693" src="/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1024x544.png" alt="" class="wp-image-18693" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_rep_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18694" src="/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1024x544.png" alt="" class="wp-image-18694" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_resto_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18695" src="/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1024x544.png" alt="" class="wp-image-18695" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>


<p>Enkele bemerkingen konden geformuleerd worden:</p>
<ul>
<li>Here doet het hier beter dan Google Maps en zijn concurrenten en lokaliseert meer adressen nauwkeurig;</li>
<li>Nominatim is niet erg robuust: afhankelijk van de dataset, behalve voor de BestAddress-gegevens (best_1000, die veel schoner en meer gestandaardiseerd zijn dan de andere datasets), worden tussen 10 en 15% van de adressen gewoon niet gevonden. En van een aanzienlijk deel van de adressen is alleen de straatnaam bekend;</li>
<li>Onze oplossing gebaseerd op Nominatim (<a href="https://github.com/SmalsResearch/NominatimWrapper">NominatimWrapper</a>) verbetert zeer duidelijk de robuustheid. Maar we hebben nog steeds een groot deel van de adressen die alleen op straatniveau liggen;</li>
<li>Op dit moment is Pelias beperkt tot een groot deel van de adressen op stadsniveau. Maar de integratie van BestAddress-gegevens is vrij recent, dus we kunnen in de nabije toekomst verbeteringen verwachten;</li>
<li>De robuustheid van de BOSA API (bestaddress) ligt dicht bij die van Nominatim, maar dit is momenteel een bewuste keuze: het doel is niet echt om een API voor geocodering te verkrijgen, maar om de locatie van een adres mogelijk te maken dat al bekend is, d.w.z. waarvan de plaats- en straataanduidingen bekend zijn, of op zijn minst correct gespeld. De verschillende diensten die door de API worden aangeboden, maken het mogelijk om een lijst met straten voor elke gemeente te verkrijgen, waardoor het mogelijk wordt om een interface met lijsten of automatische aanvulling aan te bieden, zodat de invoergegevens &#8220;schoon&#8221; zijn. Het is dus geen volledige API voor geocodering, aangezien alleen het &#8220;lokalisatie&#8221;-gedeelte wordt aangeboden, en niet het &#8220;opschonen van gegevens&#8221;-gedeelte.</li>
</ul>
<p>Merk op dat het feit dat een resultaat precies is, niet betekent dat het ook correct is. We hebben deze problematiek al aangehaald <a href="/comparer-des-geocodeurs/">in een eerder artikel</a>. Een Python-notebook is eveneens beschikbaar die <a href="https://github.com/SmalsResearch/GISAnalytics/blob/main/Geocoder_Compare.ipynb">een vergelijkingsmethodologie voorstelt</a>.</p>
<p>NominatimWrapper staat sinds juni 2023 in de Re-Use Catalogus van de sociale zekerheid in België: <a href="https://www.ict-reuse.be/nl/service/geocode-met-verbeterde-nominatim">https://www.ict-reuse.be/nl/service/geocode-met-verbeterde-nominatim</a></p>
<h1>Om af te sluiten</h1>
<p>Er zijn veel oplossingen beschikbaar voor geocodering. Soms moet je verder kijken dan de eerste die je te binnen schiet: elke tool heeft zijn voor- en nadelen. Technische en wettelijke beperkingen betekenen dat je jezelf een aantal vragen moet stellen. Het is ook cruciaal om de tool te testen op de soort gegevens die je moet beheren, omdat het kwaliteitsniveau en de structuur van de invoergegevens een grote invloed kunnen hebben op de kwaliteit van het resultaat.</p>
<hr />
<p><span style="color: #999999;"><em>Deze post is een individuele bijdrage van Vandy Berten, gespecialiseerd in data science bij Smals Research. Dit artikel is geschreven onder zijn eigen naam en weerspiegelt op geen enkele wijze de standpunten van Smals</em><em>.</em></span></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Géocodage&#160;: quel outil pour quel besoin&#160;?</title>
		<link>https://www.smalsresearch.be/geocodage-quel-outil-pour-quel-besoin/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Fri, 02 Jun 2023 07:29:11 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=18567</guid>

					<description><![CDATA[Pour être capable de positionner une adresse sur une carte, pour calculer un itinéraire ou pour identifier l'ensemble des commerces dans un quartier donné, il est nécessaire de passer par une étape fondamentale : le géocodage. Cette opération consiste, à partir d'une adresse postale, comme "Av. Fonsny 20, 1060 Bruxelles", d'une part à la "standardiser" (partie bordeaux de l'image ci-dessous), d'autre part à lui assigner des coordonnées géographiques ("location" dans l'image).  ]]></description>
										<content:encoded><![CDATA[<p><em><a href="/geocode-welke-tool-voor-welke-behoefte/">Nederlandstalige versie</a></em></p>
<p>Pour être capable de positionner une adresse sur une carte, pour calculer un itinéraire ou pour identifier l&#8217;ensemble des commerces dans un quartier donné, il est nécessaire de passer par une étape fondamentale&nbsp;: le géocodage. Cette opération consiste, à partir d&#8217;une adresse postale, comme &#8220;Av. Fonsny 20, 1060 Bruxelles&#8221;, d&#8217;une part à la &#8220;standardiser&#8221; (partie bordeaux de l&#8217;image ci-dessous), d&#8217;autre part à lui assigner des coordonnées géographiques (&#8220;location&#8221; dans l&#8217;image).  </p>


<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2023/05/2023-05-22_15h03_49.png"><img loading="lazy" decoding="async" width="1024" height="390" src="/wp-content/uploads/2023/05/2023-05-22_15h03_49-1024x390.png" alt="" class="wp-image-18590" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-1024x390.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-300x114.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49-768x292.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/05/2023-05-22_15h03_49.png 1335w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>


<p>La standardisation va permettre une découpe correcte de l&#8217;adresse en composants, et une rectification (&#8220;Av.&#8221; en &#8220;Avenue&#8221;, &#8220;1060 Bruxelles&#8221; en &#8220;1060 Saint-Gilles&#8221;). Elle pourra aussi supprimer des éléments non pertinents pour le géocodage, comme par exemple la partie en italique grisée dans &#8220;Av. Fonsny 20 <span style="color: #999999;"><em>bte 5 (en face de la gare)</em></span>&#8220;. Cette étape revient en fait à faire la correspondance entre une adresse en entrée et le référentiel dans lequel chaque adresse structurée est associée à ses coordonnées géographiques. Cette étape de standardisation fait donc intégralement partie du processus de géocodage et est nécessaire.</p>
<p>L&#8217;opération inverse, qui consiste à demander toutes les adresses existantes dans un périmètre donné d&#8217;un point, s&#8217;appelle le &#8220;géocodage inverse&#8221; (reverse geocoding).</p>
<p>Le géocodage peut être fait avec OpenStreetMap en appelant l&#8217;URL suivante&nbsp;:</p>
<p><a href="https://nominatim.openstreetmap.org/?q=Av.+fonsny+20,+1060+Bruxelles&amp;format=jsonv2">https://nominatim.openstreetmap.org/?q=Av.+fonsny+20,+1060+Bruxelles&amp;format=jsonv2</a></p>
<p>Le &#8220;reverse&#8221; correspondant peut se faire avec l&#8217;adresse suivante&nbsp;:&nbsp;</p>
<p><a href="https://nominatim.openstreetmap.org/reverse?lat=50.83586776&amp;lon=4.3385087&amp;format=jsonv2">https://nominatim.openstreetmap.org/reverse?lat=50.83586776&amp;lon=4.3385087&amp;format=jsonv2</a></p>
<h1>Les outils</h1>
<p>Cette opération de géocodage se fait typiquement via une API, mise à disposition par un serveur. De nombreuses solutions existent, le choix va fortement dépendre des réponses aux différentes questions que nous allons mentionner dans la suite de ce texte. Nous nous focaliserons sur le géocodage d&#8217;adresses en Belgique, mais à part quelques éléments spécifiques, les questions seront génériques.</p>
<p>Nous avons examiné de façon approfondie une série d&#8217;outils, commerciaux ou non&nbsp;:&nbsp;</p>
<ul>
<li>Commerciaux (Cloud)&nbsp;:
<ul>
<li><a href="https://developers.google.com/maps/documentation/geocoding/overview">Google Maps</a></li>
<li><a href="https://learn.microsoft.com/en-us/bingmaps/rest-services/">Bing Maps</a></li>
<li><a href="https://developer.here.com/documentation/geocoding-search-api/dev_guide/index.html">Here</a></li>
<li><a href="https://developer.tomtom.com/geocoding-api/documentation/geocode">TomTom</a></li>
<li><a href="https://docs.mapbox.com/api/search/geocoding/">Mapbox</a></li>
</ul>
</li>
<li>Non-commerciaux (on premise)&nbsp;:
<ul>
<li><a href="https://nominatim.org/release-docs/latest/api/Overview/">Nominatim</a> (OpenStreetMap), version &#8220;<a href="https://github.com/mediagis/nominatim-docker/tree/master/4.2">dockerisée locale</a>&#8220;</li>
<li><a href="https://github.com/SmalsResearch/NominatimWrapper/">NominatimWrapper</a>, une solution que nous avons développée pour combler certaines lacunes de Nominatim</li>
<li><a href="https://pelias.io/">Pelias</a>, en y chargeant les données de <a href="https://opendata.bosa.be/index.fr.html">BestAddress</a> (source authentique des adresses en Belgique) et d&#8217;OpenStreetMap</li>
</ul>
</li>
</ul>
<p>Nous avons par ailleurs examiné en &#8220;avant-première&#8221; <a href="https://bosa.belgium.be/fr/services/best-address-services">l&#8217;API de BestAddress</a>, qui n&#8217;est pas disponible publiquement. Notons que plusieurs grands acteurs de solutions GIS peuvent aussi offrir des solutions dédiées, (semi-)on-premise ou non. Nous n&#8217;avons pas exploré ces pistes, qui nécessitent des démarches commerciales complexes avec ces entreprises.</p>
<h1>Cloud vs on-premise</h1>
<p>Une première question à se poser est de savoir si l&#8217;on peut utiliser une API commerciale qu&#8217;il &#8220;suffit&#8221; d&#8217;appeler, ou s&#8217;il est nécessaire d&#8217;avoir un géocodeur &#8220;on-premise&#8221;, géré et installé au sein de l&#8217;infrastructure de l&#8217;entreprise ou de l&#8217;administration.</p>
<p>L&#8217;avantage d&#8217;une solution Cloud (Google Maps, Here, Bing&#8230;) commerciale est sa facilité de gestion et l&#8217;absence de coût d&#8217;infrastructure. Ces solutions sont en général également de bonne qualité et offrent une couverture mondiale. Il faudra cependant tenir compte d&#8217;un coût par appel, qui peut devenir problématique pour des volumes importants. Souvent, un quota d&#8217;appels gratuits est cependant proposé (40.000/mois pour Google Maps, 30.000/mois pour Here, &#8230;.)</p>
<p>Les solutions on-premise permettent de répondre à des besoins de confidentialité ou de respect du GDPR plus élevé. Elles seront en général aussi plus rapides si le volume de données est important. Il faudra cependant tenir compte de coûts d&#8217;infrastructure et de gestion plus important, et une couverture mondiale sera difficile à envisager, à moins de disposer de plusieurs téraoctets de données à consacrer au produit.</p>
<table style="width: 100%; height: 544px;" width="990">
<tbody>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">&nbsp;</td>
<td style="height: 68px;" width="277">
<p><b>Cloud solutions</b></p>
</td>
<td style="height: 68px;" width="330">
<p><b>On-premise</b><b> solutions</b></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Complexité à mettre en place</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Coût infra</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>GDPR, Confidentialité</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Coût pour gros volumes (temps, €)</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Accès internet</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Qualité</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff6600;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f610.png" alt="😐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
<tr style="height: 68px;">
<td style="height: 68px;" width="383">
<p>Couverture mondiale</p>
</td>
<td style="text-align: center; height: 68px;" width="277">
<p><span style="color: #000000; background-color: #339966;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
<td style="text-align: center; height: 68px;" width="330">
<p><span style="color: #000000; background-color: #ff0000;"><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /></strong></span></p>
</td>
</tr>
</tbody>
</table>
<h1>Niveau de précision</h1>
<p>L&#8217;exigence de la précision, à savoir la nécessité que l&#8217;adresse soit localisée exactement au bon endroit, ne sera pas la même s&#8217;il s&#8217;agit de faire des statistiques globales, de savoir dans quel quartier se trouve une adresse, quel livreur ou contrôleur devrait l&#8217;intégrer dans sa tournée, que s&#8217;il s&#8217;agit d&#8217;envoyer une équipe de secours. Dans les premières situations, on acceptera que par exemple qu&#8217;une certaine proportion d&#8217;adresses soit localisée au niveau de la rue et pas du bâtiment précis.</p>
<h1>Structuration des adresses</h1>
<p>La plupart des géocodeurs acceptent de recevoir en entrée soit une adresse structurée (rue=&#8217;Av. Fonsny&#8217;, numéro=&#8217;20&#8217;&#8230;) soit une adresse non structurée&nbsp; (adresse=&#8217;Av. Fonsny 20, 1060 St-Gilles&#8217;). Mais certains exigent que l&#8217;adresse soit structurée, ce qui peut poser un problème si on n&#8217;en dispose pas sous cette forme, ou qu&#8217;elles sont souvent mal découpées (rue=&#8217;Av. Fonsny 20&#8242;, numéro=&#8221;).</p>
<h1>Source authentique</h1>
<p>Une même adresse peut connaitre des orthographes différentes en fonction de la source. Par exemple, à Bruxelles, deux rues sont nommées suivant la commune de &#8220;Tervuren&#8221; (une chaussée sur Auderghem, une avenue sur Etterbeek, Auderghem et Woluwé-Saint-Pierre)&nbsp;:</p>
<ul>
<li>Selon Bing, il y a la chaussée de Ter<strong>vur</strong>en et l&#8217;avenue de Ter<strong>vuer</strong>en&nbsp;;</li>
<li>Selon Google maps ou OpenStreetMap, il s&#8217;agit de la chaussée de Ter<strong>vuer</strong>en et l&#8217;avenue de Ter<strong>vuer</strong>en&nbsp;;</li>
<li>Selon BestAddress, on a l&#8217;avenue de Ter<strong>vuer</strong>en à Etterbeek et Woluwé-Saint-Pierre, mais la chaussée et l&#8217;avenue de Ter<strong>vur</strong>en à Auderghem&nbsp;;</li>
<li>Selon le registre national, il s&#8217;agit tout le temps de Ter<strong>vuer</strong>en.</li>
</ul>
<p>En fonction du contexte, il peut être important d&#8217;obtenir toujours la formulation correspondant à une source en particulier. Par exemple parce qu&#8217;on a nécessairement besoin d&#8217;avoir une version connue par une source authentique. Ou, pour les coordonnées géographiques, parce qu&#8217;on va ensuite l&#8217;afficher sur un fond de carte, et qu&#8217;on désire donc être le plus en accord possible. En effet, placer sur une carte de Google Maps une adresse qui a été géocodée avec OpenStreetMap risque dans certains cas de provoquer un léger décalage.</p>
<p>S&#8217;il est nécessaire d&#8217;obtenir des données selon BestAddress (en Belgique), il y a à l&#8217;heure actuelle principalement trois possibilités&nbsp;:&nbsp;</p>
<ul>
<li>L&#8217;API&nbsp; &#8220;officielle&#8221; offerte par Bosa (pour l&#8217;instant uniquement en phase de test)</li>
<li>En installation locale, Pelias en chargeant le dataset de BestAddress</li>
<li><a href="https://phacochr.github.io/phacochr/">Phacochr</a> (cf plus bas), uniquement en mode batch, sans API.</li>
</ul>
<p>Notons aussi qu&#8217;il existe une <a href="https://loc.geopunt.be/">API fournie par &#8220;geopunt.be&#8221;</a>, spécifiquement pour les adresses belges en Flandre et à Bruxelles (en néerlandais).&nbsp;</p>
<h1>Couverture</h1>
<p>Un des avantages des solutions Cloud est qu&#8217;elle permettent à la fois de géocoder une adresse à Bruxelles, à New-York et à Taipei. Faire la même chose avec une solution locale peut exiger un espace prohibitif. Pour la (toute petite) Belgique, OpenStreetMap (Nominatim) nécessite 30 GB d&#8217;espace disque. Le monde entier nécessiterait plusieurs téraoctets, et une mise en place de plusieurs semaines.</p>
<p>Une installation limitée à un pays peut cependant convenir pour une administration qui ne devrait que gérer des adresses dans son pays. Il existe aussi des possibilités hybrides&nbsp;: il est possible de configurer Nominatim pour offrir un géocodage complet pour une sélection de pays, et se limiter à la localisation et nettoyage au niveau des villes pour le reste du monde.</p>
<h1>Besoin d&#8217;une API</h1>
<p>Nous nous sommes focalisés sur les API, c&#8217;est-à-dire les interfaces &#8220;techniques&#8221; offrant la fonctionnalité de géocodage d&#8217;adresses une par une. Ceci permet d&#8217;intégrer cette fonctionnalité dans une application ou dans un processus automatisé de gestion de données. Mais dans certains cas, on possède un fichier d&#8217;adresses, que l&#8217;on souhaite manuellement géocoder avant une analyse spécifique. Des outils permettent cette tâche, par exemple <a href="https://www.geoapify.com/tools/geocoding-online">GeoApify</a>, ou, pour des adresses belges avec en résultat les données de BestAddress, Phacochr (<a href="https://phacochr.github.io/phacochr">dans un script R</a>, ou <a href="https://phacochr.github.io/phacochr/articles/shiny_app.html">avec la version web</a>)</p>
<h1>Performances</h1>
<p>Avoir une solution rencontrant les critères évoqués ci-dessus n&#8217;est pas suffisant. Encore faut-il que les performances soient au rendez-vous. L&#8217;aspect &#8220;vitesse&#8221; doit certainement être pris en considération, mais l&#8217;on s&#8217;intéresse ici surtout à la &#8220;robustesse&#8221;, à savoir la capacité à proposer un résultat (précis) pour le plus grand nombre d&#8217;adresses. Pour une série d&#8217;échantillons d&#8217;adresses belges provenant de diverses sources (officielles ou non), nous avons effectué quelques tests. Dans les graphiques ci-dessous, la partie en bleu représente la proportion d&#8217;adresse que l&#8217;API a été capable de localiser précisément (au niveau du bâtiment). En orange, lorsque la rue a été trouvée, mais pas le numéro précis. En vert, seule la ville a pu être localisée.</p>
<p>Les échantillons de 1000 adresses chacun proviennent des sources suivantes (toutes belges)&nbsp;:&nbsp;</p>
<ul>
<li>kbo&nbsp;: la Banque Carrefour des Entreprises</li>
<li>rep&nbsp;: le Répertoire des Employeurs</li>
<li>rrn&nbsp;: le Registre National</li>
<li>best&nbsp;: BestAddress (Bosa)</li>
<li>resto&nbsp;: le site web resto.be</li>
</ul>


<figure class="wp-block-gallery has-nested-images columns-2 is-cropped wp-block-gallery-6 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_rrn_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18690" src="/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1024x544.png" alt="" class="wp-image-18690" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rrn_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_best_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18692" src="/wp-content/uploads/2023/06/matching_rate_best_1000-2-1024x544.png" alt="" class="wp-image-18692" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_best_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_kbo_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18693" src="/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1024x544.png" alt="" class="wp-image-18693" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_kbo_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_rep_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18694" src="/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1024x544.png" alt="" class="wp-image-18694" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_rep_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/geocodage-quel-outil-pour-quel-besoin/matching_rate_resto_1000-2/"><img loading="lazy" decoding="async" width="1024" height="544" data-id="18695" src="/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1024x544.png" alt="" class="wp-image-18695" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1024x544.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-300x159.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-768x408.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-1536x816.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/06/matching_rate_resto_1000-2-2048x1088.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</figure>


<p>Quelques observations peuvent être faites&nbsp;: </p>
<ul>
<li>Here s&#8217;en sort mieux que Google Maps et ses concurrents, en localisant plus d&#8217;adresses précisément ;</li>
<li>Nominatim n&#8217;est pas très robuste&nbsp;: en fonction du jeu de données, mises à part sur les données de BestAddress (best_1000, nettement plus propres et standardisées que les autres jeux de données), entre 10 et 15 % des adresses n&#8217;ont tout simplement pas été trouvées. Et pour une proportion importante des adresses, seule la rue est connue ;</li>
<li>Notre solution basée sur Nominatim (<a href="https://github.com/SmalsResearch/NominatimWrapper/">NominatimWrapper</a>) améliore très nettement la robustesse. Mais on reste avec une proportion importante d&#8217;adresses localisées uniquement au niveau de la rue ;</li>
<li>Pelias se limite, à ce stade, à une grande proportion d&#8217;adresses localisées au niveau de la ville. Mais l&#8217;incorporation des données de BestAddress est assez récente, on peut donc espérer des améliorations prochaines ;</li>
<li>La robustesse de l&#8217;API de BOSA (bestaddress) est proche de celle de Nominatim, mais c&#8217;est à l&#8217;heure actuelle un choix assumé&nbsp;: le but n&#8217;est pas vraiment d&#8217;obtenir une API de géocodage, mais de permettre de localiser une adresse déjà connue, c&#8217;est-à-dire dont les identifiants de commune et rue sont connus, ou à tout le moins correctement orthographiées. Les différents services offerts par l&#8217;API permettent d&#8217;obtenir une liste de rues pour chaque commune, ce qui permet de proposer une interface avec des listes ou de l’auto-complétion, garantissant que les données en entrée soient &#8220;propres&#8221;. Ce n&#8217;est donc pas complètement une API de géocodage, puisque seule la partie &#8220;localisation&#8221; est offerte, et pas la partie &#8220;nettoyage de données&#8221;.</li>
</ul>
<p>Notons que ce n&#8217;est pas parce qu&#8217;un résultat est précis qu&#8217;il est correct. Nous avons déjà abordé cette problématique <a href="/comparer-des-geocodeurs/">dans un article précédent</a>. Un notebook Python est également disponible <a href="https://github.com/SmalsResearch/GISAnalytics/blob/main/Geocoder_Compare.ipynb">proposant une méthodologie de comparaison</a>.</p>
<p>NominatimWrapper est depuis juin 2023 dans le <a href="https://www.ict-reuse.be/fr">Re-Use Catalog</a> de la sécurité sociale en Belgique&nbsp;: <a href="https://www.ict-reuse.be/fr/service/geocodage-avec-nominatim-ameliore">https://www.ict-reuse.be/fr/service/geocodage-avec-nominatim-ameliore</a>.</p>
<h1>Pour conclure</h1>
<p>De multiples solutions sont disponibles pour faire du géocodage. Il faut parfois aller plus loin que de sauter sur la première à laquelle on pense&nbsp;: chaque outil aura ses avantages et inconvénients. Les contraintes techniques et légales nécessitent de se poser une série de questions. Il sera également crucial de tester l&#8217;outil sur des données types que l&#8217;on devra gérer, car le niveau de qualité et la structure des données en entrée peut avoir un impact majeur sur la qualité du résultat. </p>
<hr />
<p><span style="color: #999999;"><em>Ce post est une contribution individuelle de Vandy Berten, spécialisé </em>en<em> data science chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></span></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Géocodage&#160;: contourner les lacunes d&#8217;OpenStreetMap (partie 2)</title>
		<link>https://www.smalsresearch.be/geocodage-contourner-les-lacunes-dopenstreetmap-partie-2/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Tue, 05 May 2020 08:12:21 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=14415</guid>

					<description><![CDATA[Dans notre article précédent, nous présentions les difficultés que nous avons rencontrées dans notre tentative de géocoder (convertir une adresse en coordonnées géographiques, et standardiser cette adresse) avec Nominatim, le géocodeur d&#8217;OpenStreetMap. Nous avons aussi évoqué qu&#8217;en modifiant légèrement les adresses que Nominatim n&#8217;avait par reconnues, elles le devenaient. Nous avons considéré un ensemble de [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Dans notre <a href="/geocodage-contourner-les-lacunes-dopenstreetmap-partie-1/" target="_blank" rel="noopener noreferrer">article précédent</a>, nous présentions les difficultés que nous avons rencontrées dans notre tentative de géocoder (convertir une adresse en coordonnées géographiques, et standardiser cette adresse) avec Nominatim, le géocodeur d&#8217;OpenStreetMap. Nous avons aussi évoqué qu&#8217;en modifiant légèrement les adresses que Nominatim n&#8217;avait par reconnues, elles le devenaient. Nous avons considéré un ensemble de modifications, que nous appelons ci-dessous des &#8220;<em>transformers</em>&#8220;. Nous présentons ensuite comment des combinaisons de <em>transformers</em> nous ont permis de notablement améliorer le &#8220;matching rate&#8221;, c&#8217;est-à-dire la proportion d&#8217;adresses reconnues par Nominatim.  </p>
<p>Nous mettons à disposition le code (Python) qui permet d&#8217;appliquer la logique présentée ci-dessous, soit en mode &#8220;batch&#8221;, soit via une API REST&nbsp;:</p>
<p style="text-align: center;"><a href="https://github.com/SmalsResearch/NominatimWrapper">https://github.com/SmalsResearch/NominatimWrapper</a>.</p>
<p>Une version plus détaillée de ce travail sera disponible sous peu, incluant une comparaison fonctionnelle et de performance, entre la solution que nous proposons, le logiciel Trillium (utilisé chez Smals) et le projet BeStAddress (source authentique d&#8217;adresses en Belgique). </p>
<h1><a name="_Toc32234793"></a>Principe de &#8220;Transformers&#8221;</h1>
<p><a href="/wp-content/uploads/2020/05/transformers.png"><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-14495" src="/wp-content/uploads/2020/05/transformers-300x207.png" alt="" width="300" height="207" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/05/transformers-300x207.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/05/transformers.png 708w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>Le principe général de notre solution est le suivant&nbsp;: avant d&#8217;envoyer les adresses à OpenStreetMap, on les fera passer par un séquence (éventuellement vide) d&#8217;opérateurs, nommés &#8220;transformers&#8221; ci-dessous, visant à les nettoyer. Les résultats d&#8217;OSM seront ensuite analysés, pour éventuellement rejeter certains résultats (avec la méthode de vérification des résultats présentée dans notre article précédent). Pour toutes les adresses qui n&#8217;ont pas donné de résultats (soit parce qu&#8217;OSM n&#8217;a donné aucun résultat, soit parce que ceux-ci ont été rejetés), nous appliquons une autre séquence de &#8220;transformers&#8221; avant ré-envoi, et ce jusqu&#8217;à ce que soit toutes les adresses ont donné un résultat, soit toutes les séquences de transformers définies ont été épuisées.</p>
<p> </p>
<h2><a name="_Toc32234794"></a>Suppression du numéro</h2>
<p>Il est fréquent que Nominatim ne renvoie aucun résultat pour une adresse, mais qu&#8217;il en retourne un si l&#8217;on supprime le numéro. Ce premier transformer est donc très simple&nbsp;: il supprime simplement toute valeur du champ &#8220;house_number&#8221;. </p>
<p>Il faut être conscient qu&#8217;on baisse la fiabilité, puisqu&#8217;il ne sera plus possible d&#8217;obtenir un résultat précis au niveau du bâtiment (place rank=30). Mais un résultat, même imprécis, reste meilleur qu&#8217;une absence de résultat.</p>
<h2>Remplacement par expression régulière</h2>
<p>Notre expérience nous a montré qu&#8217;il est fréquent de trouver des conventions peu habituelles. Par exemple, dans l&#8217;exemple détaillé ci-dessous, de nombreuses adresses sont écrites sous la forme &#8220;A FONSNY&#8221; ou &#8220;R DE LA LOI&#8221;. Nous avons aussi rencontré un grand nombre d&#8217;adresses du type &#8220;Fonsny (Avenue)&#8221; ou &#8220;Loi (Rue de la)&#8221;. Ou encore &#8220;Rue de l été&#8221;. Voire encore &#8220;SN&#8221; (sans numéro) dans le champs du numéro.</p>
<p>Ce genre d&#8217;adresse peut facilement être corrigée par un replacement par expression régulière. Par exemple, le cas de l&#8217;apostrophe manquante peut être corrigé en remplaçant toute occurrence de &#8221; de l &#8221; par &#8221; de l'&#8221;. L&#8217;ensemble des expressions à considérer sera typiquement dépendant du dataset et des habitudes et convention que l&#8217;on y observera.</p>
<h2><a name="_Toc32234796"></a>Libpostal</h2>
<p>La librairie <a href="https://github.com/openvenues/libpostal">libpostal</a>, présentée dans notre article précédent, est un utilitaire permettant de <em>parser</em> un adresse, c&#8217;est-à-dire identifier ses différentes composantes. Si on lui soumet par exemple &#8220;Smals, Avenue Fonsny 20 bte 5, 1060 Saint-Gilles&#8221;, on obtiendra comme résultat&nbsp;: </p>
<pre>[('smals', 'house'),<br /> ('avenue fonsny', 'road'),<br /> ('20', 'house_number'),<br /> ('bte 5', 'unit'),<br /> ('1060', 'postcode'),<br /> ('saint-gilles', 'city')]</pre>
<p>Il devient alors facile d&#8217;ignorer les éléments qui ne font pas réellement partie de l&#8217;adresse (&#8216;smals&#8217;, &#8216;house&#8217;) et ce qui décrit la boite ou l&#8217;étage (&#8216;bte 5&#8217;, &#8216;unit&#8217;), de façon à ne pas les envoyer à OSM. </p>
<h2><a name="_Toc32234797"></a>Photon</h2>
<p><a href="https://photon.komoot.de/">Photon</a> est un utilitaire qui combine OpenStreetMap et ElasticSearch, également présenté dans notre article précédent. Il est nettement moins sensible aux fautes de frappe que Nominatim. </p>
<p>Les adresses, non trouvées jusqu&#8217;ici par Nominatim, sont envoyée à Photon (une API). On vérifie que le résultat est raisonnablement proche de l&#8217;adresse initiale, puis on la renvoie à Nominatim.</p>
<p>Prenons l’exemple de la « Rue de Brabant », à 1030 Schaerbeek, qui serait erronément orthographiée « Rue du Brabant ». Envoyé à Nominatim, nous n’obtenons aucun résultat :</p>
<p><a href="https://nominatim.openstreetmap.org/search.php?q=RUE%20DU%20BRABANT,%201030%20SCHAERBEEK&amp;format=jsonv2">https://nominatim.openstreetmap.org/search.php?q=RUE%20DU%20BRABANT,%201030%20SCHAERBEEK&amp;format=jsonv2</a></p>
<p>Photon, pour la même rue, va en fait retourner dans son résultat une série de rues avoisinant la rue en question&nbsp;:</p>
<p><a href="https://photon.komoot.de/api/?q=RUE%20DU%20BRABANT,%201030%20SCHAERBEEK">http://photon.komoot.de/api/?q=RUE%20DU%20BRABANT,%201030%20SCHAERBEEK</a></p>
<p>On a dans le résultat, certes la « Rue de Brabant », mais également « Rue du Pavillon », « Rue du Saphir », …. Seul le premier résultat sera gardé et renvoyé à Nominatim, qui proposera cette fois-ci un résultat.</p>
<h2>Suppression de la rue</h2>
<p>En dernier recours, lorsqu&#8217;aucune (séquence de) transformation n&#8217;a permis à Nominatim de trouver une adresse, nous supprimons la rue (et le numéro), dans l&#8217;espoir qu&#8217;au moins la localité soit reconnue. Il va de soi qu&#8217;un &#8220;match&#8221; d&#8217;une adresse ayant subi cette modification n&#8217;aura pas le même poids qu&#8217;un &#8220;match&#8221; sur une adresse complète.   </p>
<h1>Expérimentations</h1>
<p>Comme pour nos articles précédents, nous avons repris les adresses disponibles en open data, de la Banque Carrefour des Entreprises, en Belgique (<a href="https://kbopub.economie.fgov.be/kbo-open-data/login?lang=fr">https://kbopub.economie.fgov.be/kbo-open-data/login?lang=fr</a>). Cette base de données contient 3,112 millions d’adresses d’entreprises, dont 3,027 millions en Belgique. </p>
<p>Dans un premier temps, nous avons envoyé les adresses telles quelles. 83,3 % (matching rate) des adresses ont donné un résultat accepté par nos règles de vérifications présentées ci-dessus (qui en ont seulement rejeté 0,46 %). Nous avons ensuite appliqué une série de combinaisons de « <em>transformers</em> », présentées dans le tableau et la figures ci-contre. Au final, la séquence de <em>transformers</em> a permis de faire monter le taux de succès de 83,3 à 98,6 %, en 2 petites heures sur un serveur virtuel  avec 8 cœurs et 24 GB de mémoire. Nous avons évalué plusieurs séquences de <em>transformers</em> (par exemple, d’abord suppression du numéro, puis libpostal, ou l’inverse), mais l’impact sur le résultat était en général très faible.</p>
<p>Le transformer &#8220;orig&#8221; ne fait aucune modification. Nous avons dans notre expérimentation utilisé deux variantes du transformer « regex »&nbsp;: un premier (regex[init] ci-dessous) permettait de nettoyer les adresses en entrée, principalement la suppression de tout texte apparaissant entre parenthèse. Le second (regex[lpost]) les adresses traitées par libpostal. </p>
<p>Le tableau ci-dessous indique, pour chaque étape, le nombre d’adresses ayant été envoyées à OSM (Sent), le nombre de résultats acceptés (Match), le ratio des deux (Match rate), le ratio par rapport au nombre d’adresses globales (Glob MR), ainsi que sa valeur cumulée (Cum MR). Cette dernière colonne nous permet de voir comment nous arrivons au « matching rate » de 98,64 % pour le dataset en question (99,97 en incluant « nostreet »).</p>
<p>Nous constatons que le « transformer » ayant eu le plus d’effet est le « regex[init] », essentiellement grâce à la suppression des parenthèses (10,43% d’amélioration), suivi de la combinaison libpostal + photon (2,84 %)</p>
<table style="width: 0%;" width="0">
<tbody>
<tr>
<td style="width: 45.4731%;" width="250">
<p><strong>Method</strong></p>
</td>
<td style="width: 15.7749%;" width="74">
<p><strong>Sent</strong></p>
</td>
<td style="width: 12.3153%;">
<p><strong>Match</strong></p>
</td>
<td style="width: 9.35961%;">
<p><strong>Match rate (%)</strong></p>
</td>
<td style="width: 7.22496%;">
<p><strong>Glob MR </strong></p>
</td>
<td style="width: 1.64745%;">
<p><strong>Cum MR</strong></p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>orig</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>3.062.332</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>2.551.079</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>83,31</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>83,31</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>83,31</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>regex[init]
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>348.011</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>319.321</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>91,76</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>10,43</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>93,73</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>nonum</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>184.503</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>36.653</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>19,87</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>1,20</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>94,93</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>libpostal+regex[lpost]
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>69.780</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>16.881</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>24,19</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>0,55</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>95,48</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>libpostal+regex[lpost]+nonum</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>129.906</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>895</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>0,69</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>0,03</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>95,51</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>libpostal+regex[lpost]+photon</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>91.867</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>86.853</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>94,54</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>2,84</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>98,35</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>libpostal+regex[lpost]+photon<br />+nonum</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>5.400</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>2.450</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>45,37</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>0,08</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>98,43</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>photon</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>8.591</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>6.038</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>70,28</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>0,20</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>98,62</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>photon+nonum</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>2.949</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>454</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>15,40</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>0,01</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>98,64</p>
</td>
</tr>
<tr>
<td style="width: 45.4731%;" width="250">
<p>nostreet</p>
</td>
<td style="width: 15.7749%; text-align: right;" width="74">
<p>41.708</p>
</td>
<td style="width: 12.3153%; text-align: right;">
<p>40.875</p>
</td>
<td style="width: 9.35961%; text-align: right;">
<p>98,00</p>
</td>
<td style="width: 7.22496%; text-align: right;">
<p>1,33</p>
</td>
<td style="width: 1.64745%; text-align: right;">
<p>99,97</p>
</td>
</tr>
</tbody>
</table>
<p>Notons que nous avons aussi appliqué notre méthode sur des adresses de moins bonne qualité, typiquement correspondant à des adresses encodées par des agents lors d’inspections. Nous avions alors un taux de succès initial de 65 %, que nos <em>transformers</em> ont pu faire grimper à 93 %.</p>
<h2><a name="_Toc32234802"></a>Adresses non trouvées</h2>
<p>Au total, 1,3%, soit  de l&#8217;ordre de 30.000  adresses, n’ont pas été trouvées, ou seulement après suppression de la rue. Si l’on ignore les numéros de bâtiment, cela représente 6.123 couples rue-ville. Nous avons envoyé ces 6.123 au géocodeur de Here (Nokia). Nous avons trouvé un résultat pour 4.060 adresses. Parmi ces résultats, 580 ont un code postal différent des données, indiquant soit que le résultat est incorrect, soit que le code postal est incorrect dans les données.</p>
<p>Lorsque le code postal est compatible (3.480), 1.960 ont une rue (quasiment) identique à la rue en entrée. Il s’agirait probablement de bons candidats pour enrichir OpenStreetMap. Nombre d’entre elles sont effectivement présentes sur OSM, mais non nommées.</p>
<p>Parmi les 1.540 adresses restantes, nous constatons qu’elles sont fréquemment si mal encodées qu’il est peu probable qu’un processus fiable puisse les traiter sans prendre de grands risques. Il s’agit soit d’adresses très abrégées comme « 20 P.ST.GERY » (pour « Place Saint-Géry », avec un numéro qui devrait se trouver dans un champ adéquat) ou « A 11 NOVEMB. » (pour « Avenue du Onze Novembre »), soit des informations plutôt descriptives (« Maison communale », « Hôtel XXX », « Ferme de XXX », « Café XXX », « Centre commercial XXX »…). Nous remarquons que souvent, la réponse proposée par Here est suspecte, et mériterait des investigations que nous n’avons pas menées dans le cadre de ce travail.</p>
<h2><a name="_Toc32234803"></a>Numérotation</h2>
<p>Dans les résultats fournis par OSM, 49,4 % contenant un numéro de bâtiment (avec un place_rank à 30) et 50 % n’en contenait pas (place_rank à 26), alors que seul 1,1 % n’avait pas d’information dans la champ numéro (0,8 % si on considère les numéros présents dans le champ de la rue). Si l’objectif est de géocoder les adresses, c’est-à-dire de les convertir en coordonnées géographiques, nous ne pouvons vraisemblablement pas faire mieux avec OSM, et devons simplement savoir que la moitié des points ont une précision au niveau de la rue.</p>
<p>S’il s’agit par contre de nettoyer les adresses, auxquelles on doit pouvoir envoyer une lettre ou un agent, il va de soi que l’on ne peut pas se contenter d’adresses où la moitié des numéros manque. Par ailleurs, plusieurs <em>transformers</em> ont potentiellement simplifié les numéros (22 bte 5 vers 22). Nous avons donc choisi d’enrichir les données résultat avec un numéro de bâtiment supplémentaire, suivant le principe suivant :</p>
<ul>
<li>Si le numéro est présent dans l’adresse en entrée, on le reprend</li>
<li>Sinon, on applique « libpostal ». Si ce « parsing » donne un numéro, on le garde.</li>
</ul>
<p>En faisant ceci (on calcule donc le numéro uniquement sur base des données en entrée, et non sur le résultat d’OSM), on a donc un numéro dans 99,2 % des cas (cf les 0,8 % évoqués ci-dessus).</p>
<p><a href="/wp-content/uploads/2020/04/house_number.png"><img loading="lazy" decoding="async" class="alignleft wp-image-14418 size-medium" src="/wp-content/uploads/2020/04/house_number-300x191.png" alt="" width="300" height="191" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/04/house_number-300x191.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/04/house_number.png 335w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>Pour 50,2 % des adresses, il s’agit d’une information que OSM n’avait pas fournie. Dans 44.6 % des cas, elle est identique à celle d’OSM. Dans 4,3% des cas, il y a une différence, essentiellement constituée de différentes façons d’écrire « la même chose » (« 10 » au lieu de « 10-12 », « 10 ;12 » au lieu de « 10-12 ») ou presque (« 10 » au lieu de « 10 a »).  Nous avons également identifié quelques très rares cas, où quand on fournissait à Nominatim une adresse sans numéro, il y en avait un dans le résultat.</p>
<h1>Conclusions</h1>
<p>Au travers de ce travail, nous avons pu répondre aux principales contraintes que nous rencontrions, à savoir proposer une solution efficace de géocodage (standardisation des adresses, et calcul des coordonnées géographiques), on-premise et open source. Les difficultés étaient nombreuses, mais toutes ont pu être résolues avec des solutions ouvertes et gratuites&nbsp;: OpenStreetMap, Photon et Libpostal.</p>
<p>Notre solution est disponible en open source&nbsp;: <a href="https://github.com/SmalsResearch/NominatimWrapper">https://github.com/SmalsResearch/NominatimWrapper</a></p>
<p>Il reste certes des pistes d&#8217;amélioration, mais le niveau de ce que nous offrons est déjà largement supérieur à ce qu&#8217;OpenStreetMap offre de base.</p>
<p>____________</p>
<p><em>Ce post est une contribution individuelle de Vandy Berten, Data Science Expert chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>
<p>  </p>
<p> </p>
<p><strong> </strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Géocodage&#160;: contourner les lacunes d&#8217;OpenStreetMap (partie 1)</title>
		<link>https://www.smalsresearch.be/geocodage-contourner-les-lacunes-dopenstreetmap-partie-1/</link>
					<comments>https://www.smalsresearch.be/geocodage-contourner-les-lacunes-dopenstreetmap-partie-1/#comments</comments>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Mon, 17 Feb 2020 13:13:30 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[data quality]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=13645</guid>

					<description><![CDATA[Pour divers clients, nous avons été à la recherche d’une solution permettant de nettoyer (standardiser) des adresses postales, principalement en Belgique. Nous avions besoin d’une solution « on-premise », idéalement en Open-Source. Nous avons voulu construire une solution basée sur OpenStreetMap, qui permettait de rencontrer ces deux contraintes. Mais il s’est vite avéré qu’OpenStreetMap n’était [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><a href="/wp-content/uploads/2020/01/osm.png"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-14006" src="/wp-content/uploads/2020/01/osm-150x150.png" alt="" width="150" height="150" /></a>Pour divers clients, nous avons été à la recherche d’une solution permettant de nettoyer (standardiser) des adresses postales, principalement en Belgique. Nous avions besoin d’une solution « on-premise », idéalement en Open-Source. Nous avons voulu construire une solution basée sur OpenStreetMap, qui permettait de rencontrer ces deux contraintes. Mais il s’est vite avéré qu’OpenStreetMap n’était pas très robuste aux erreurs et aux données manquantes. Nous avons dès lors construit une solution combinant OpenStreetMap et d&#8217;autres outils. Cette solution nous a permis de faire passer le « matching rate » (proportion d’adresses trouvées dans OpenStreetMap) de 93 % (OpenStreetMap seule) à 98.8 % (notre combinaison) pour les adresses de la Banque Carrefour des Entreprises (Belgique).</p>
<p>Dans ce premier article, nous décrirons les difficultés que nous avons rencontrées. Suivra un second article détaillant la solution que nous avons élaborées.</p>
<h1>Contexte</h1>
<p>Lorsque l&#8217;on traite des données administratives ou commerciales, les adresses (de clients, de citoyens, d&#8217;entreprises&#8230;) sont probablement une des données pour lesquelles s&#8217;assurer une bonne qualité peut sembler facile, mais ne l&#8217;est dans la pratique pas du tout. Il est très difficile de s&#8217;assurer de deux choses :</p>
<ul>
<li>Que l&#8217;adresse soit standardisée, qualité essentielle pour pouvoir soit détecter des doublons (Matching), soit relier des entités entre deux bases de données (Entity Linking). On veut donc éviter à tout prix une base de données qui ressemblerait à ceci&nbsp;:</li>
</ul>
<table width="0">
<tbody>
<tr>
<td width="163">
<p><strong>Rue</strong></p>
</td>
<td width="162">
<p><strong>Numéro</strong></p>
</td>
<td width="162">
<p><strong>Code Postal</strong></p>
</td>
<td width="163">
<p><strong>Ville</strong></p>
</td>
</tr>
<tr>
<td width="163">
<p>Avenue Fonsny</p>
</td>
<td width="162">
<p>20</p>
</td>
<td width="162">
<p>1160</p>
</td>
<td width="163">
<p>Saint-Gilles</p>
</td>
</tr>
<tr>
<td width="163">
<p>Av. Fonsny</p>
</td>
<td width="162">
<p>20 bt 2</p>
</td>
<td width="162">
<p>B-1160</p>
</td>
<td width="163">
<p>Bruxelles</p>
</td>
</tr>
<tr>
<td width="163">
<p>AV FONSNY, 20</p>
</td>
<td width="162">
<p> </p>
</td>
<td width="162">
<p>1160</p>
</td>
<td width="163">
<p>BXL</p>
</td>
</tr>
</tbody>
</table>
<ul>
<li>Que l&#8217;adresse existe, autant la ville que la rue (dans ladite ville) et le numéro (dans la rue). </li>
</ul>
<p>Ni la standardisation ni la vérification d&#8217;existence ne peut se faire sans une base de connaissance complexe et mise à jour, associée aux outils adéquats permettant de l&#8217;interroger intelligemment. Ceci peut principalement se faire par deux types d&#8217;outil&nbsp;:</p>
<ul>
<li>Soit des outils spécialisé en qualité de données&nbsp;: Trillium (SyncSort), RedPoint, ou le module &#8220;Data Quality&#8221; de la plupart des gros vendeurs de solution de gestion de données (Informatica, IBM, SAS, SAP, Talend, Oracle&#8230;)</li>
<li>Soit des API publiques, souvent associées à un outils de visualisation cartographique (<a href="/comparer-des-geocodeurs/">déjà présentées dans un blog précédent</a>): <a href="maps.google.com">google.com</a>, <a href="https://www.here.com">www.here.com</a> (Nokia), <a href="maps.bing.com">maps.bing.com</a> (Microsoft), <a href="https://www.openstreetmap.org">www.openstreetmap.org</a></li>
</ul>
<p>Nous avons plusieurs fois été confrontés à des clients qui, d&#8217;une part, ne devaient &#8211; ou ne voulaient &#8211; que nettoyer des adresses, et pour qui investir dans une suite logicielle complexe, chère et difficile à prendre en main n&#8217;était pas une option. D&#8217;autre part, pour qui la législation ou la confidentialité des données ne leur permettaient pas d&#8217;envoyer des centaines de milliers, voire de millions d&#8217;adresses, à un gros acteur américain. </p>
<p>Il nous a donc fallu penser à une autre solution, et nous nous sommes tournés vers l&#8217;outil de cartographie Open Source et communautaire, OpenStreetMap, qui permettait d&#8217;installer une copie de leur géocodeur, intégrale ou localisée. Nous avons vite été confrontés à de nombreux obstacles, que nous allons partager ci-dessous, avec, dans le prochain article, la façon dont nous sommes parvenus à les contourner.</p>
<h1>OpenStreetMap et Nominatim</h1>
<p><a href="/wp-content/uploads/2020/02/Public-images-osm_logo.png"><img loading="lazy" decoding="async" class="alignleft size-thumbnail wp-image-14116" src="/wp-content/uploads/2020/02/Public-images-osm_logo-150x150.png" alt="" width="150" height="150" srcset="https://www.smalsresearch.be/wp-content/uploads/2020/02/Public-images-osm_logo-150x150.png 150w, https://www.smalsresearch.be/wp-content/uploads/2020/02/Public-images-osm_logo-300x300.png 300w, https://www.smalsresearch.be/wp-content/uploads/2020/02/Public-images-osm_logo.png 512w" sizes="auto, (max-width: 150px) 100vw, 150px" /></a><a href="https://www.openstreetmap.org">OpenStreetMap</a> (ou OSM) est un projet de cartographie libre, que l’on peut voir comme l’équivalent Open Source et collaboratif de Google Maps. Un des composant d&#8217;OSM est son géocodeur, qui permet, à partir d’une adresse ou du nom d&#8217;un lieu, d’obtenir un certain nombre d’informations, dont des coordonnées géographiques et un version standardisée de l’adresse.</p>
<p>L’outil de géocodage d’OpenStreetMap s’appelle Nominatim. Il peut soit s’utiliser via une page web (<a href="https://nominatim.openstreetmap.org/">https://nominatim.openstreetmap.org/</a>), soit via une API, en invoquant simplement une URL.</p>
<p>Nous pouvons par exemple obtenir des informations à propos du « 16, Rue de la Loi, Bruxelles », en appelant l’URL suivante&nbsp;:</p>
<p><a href="https://nominatim.openstreetmap.org/search.php?q=16%2C+rue+de+la+loi%2C+bruxelles&amp;format=jsonv2&amp;addressdetails=1">https://nominatim.openstreetmap.org/search.php?q=16%2C+rue+de+la+loi%2C+bruxelles&amp;format=jsonv2&amp;addressdetails=1</a></p>
<p>On obtiendra&nbsp;:</p>
<pre>[{<br />  [...]  "lat":"50.8461624",<br />  "lon":"4.3665285",<br />  "display_name": "16, Rue de la Loi, Quartier Royal, Brussels, <br />      Ville de Bruxelles, Brussels-Capital, 1000, Belgium",<br />  "place_rank":30,<br />  "address":{<br />     "house_number":"16",<br />     "road":"Rue de la Loi",<br />     "suburb":"Quartier Royal",<br />     "state":"Brussels-Capital",<br />     "postcode":"1000",<br />     "country":"Belgium",<br />    [...] }<br />[...]}]</pre>
<pre> </pre>
<p>Par la suite, nous utiliserons indistinctement les termes OpenStreetMap, OSM ou Nominatim.</p>
<h1>Contraintes </h1>
<p>Nous allons supposer pour la suite un certain nombre de contraintes, correspondant à notre expérience auprès de plusieurs clients, détaillées dans les sections suivantes.</p>
<h2>Liste structurée</h2>
<p>Nous avons en entrée une liste d&#8217;adresses structurée, à savoir avec un champ pour la rue, un autre pour le numéro, puis deux champs pour le code postal et la ville. Il va de soi qu&#8217;il arrive cependant fréquemment que la numéro du bâtiment soit renseigné dans la champ &#8220;rue&#8221;. </p>
<p>Cette découpe &#8220;rue-numéro-code postal-ville&#8221; correspond à la plupart des adresses postales dans les pays d&#8217;Europe occidentale, mais n&#8217;est pas universelle&nbsp;: elle ne permet pas de désigner un point telle qu&#8217;une borne kilométrique sur une autoroute, et n&#8217;est pas le standard dans de nombreux pays d&#8217;Asie ou d&#8217;Amérique.</p>
<p>Ça n&#8217;empêchera cependant pas certains commerçants de faire preuve de créativité pour désigner leur magasin, en indiquant dans le champ rue&nbsp;: &#8220;Centre commercial XXX, 2ème étage, aile droite&#8221;. Des valeurs de ce genre, difficile à géocoder automatiquement, pourront être laissées telles quelles.</p>
<h2>Vérification du résultat</h2>
<p>Nous choisissons de ne pas faire une confiance aveugle au géocodeur&nbsp;: si une adresse semble trop différente de l&#8217;adresse en input (et nous reviendrons plus pas sur la difficulté de ce test), nous la refusons. </p>
<p>Nous avons constaté que là où d&#8217;autres géocodeurs, comme Google Maps, donnent presque toujours une réponse, quitte à être éloignée de la réponse attendue, OpenStreetMap joue plutôt la carte de la prudence, et préférera ne pas renvoyer de réponse qu&#8217;une réponse fausse. Mais il nous est cependant arrivé de tomber sur des réponses incorrectes. Par exemple, pour &#8220;Chée de Bruxelles, 1780 Wemmel&#8221;, OpenStreetMap renverra les résultats ci-dessous, sur la requête suivante (en tout cas au moment d&#8217;écrire ces lignes)&nbsp;: </p>
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Ch%C3%A9e+de+Bruxelles%2C+1780+Wemmel&amp;format=jsonv2&amp;addressdetails=1">https://nominatim.openstreetmap.org/search.php?q=Ch%C3%A9e+de+Bruxelles%2C+1780+Wemmel&amp;format=jsonv2&amp;addressdetails=1</a></p>
<pre>[<br />  { (...)<br />     "lat":"50.8096144","lon":"4.4437879",<br />     "address":<br />         {"house_number":"2057",<br />          "road":"Chaussée de Wavre",<br />          "town":"Auderghem",<br />          "postcode":"1160" (...)}<br />   },<br />   {(...)<br />    "lat":"50.8571889","lon":"4.3324168",<br />    "address":<br />      {"road":"Chaussée de Gand",<br />       "town":"Molenbeek-Saint-Jean",<br />       "county":"Brussels-Capital",<br />       "postcode":"1080" (...)}<br />]</pre>
<h2>Unicité du résultat</h2>
<p>Alors que la plupart des géocodeurs, pour une adresse en entrée, proposent plusieurs résultats en sortie, nous ne pouvons dans notre contexte pas laisser à un être humain le choix du meilleur candidat et devrons le sélectionner automatiquement.</p>
<h2>Environnement multilingue</h2>
<p>Nous travaillons en Belgique dans un environnement multilingue, en particulier dans certaines régions de Belgique&nbsp;: &#8220;Avenue Fonsny, Bruxelles&#8221; (en français) est donc équivalent à &#8220;Fonsnylaan, Brussel&#8221; (en néerlandais).</p>
<h2>Solution &#8220;on-premise&#8221;</h2>
<p>Comme précisé plus haut, il nous fallait une solution tournant entièrement en interne, sans connexion à Internet, y compris au moment de la mise en place de la solution.</p>
<h1>Limitation d&#8217;OpenStreetMap</h1>
<p>Dans un premier temps, nous avons installé une instance Docker d&#8217;OpenStreetMap (<a href="https://hub.docker.com/r/mediagis/nominatim/">https://hub.docker.com/r/mediagis/nominatim/</a>) en y installant toutes les données de la Belgique (disponibles sur <a href="https://download.geofabrik.de">http://download.geofabrik.de</a>), et y avons simplement, au travers d&#8217;un script en Python, envoyé toutes les adresses (entre 200.000 et 3.000.000 selon le dataset). Mais nous avons vite déchanté&nbsp;: le match rate (la proportion d&#8217;adresses pour lesquelles OSM proposait une adresse) se situait, en fonction du dataset, entre 65 et 93 %. Nous avons cependant rapidement eu le sentiment, en effectuant des légères modifications sur les adresses entrées, que ce taux pouvait facilement être augmenté. Voici quelques-unes des difficultés que avons rencontrées.</p>
<h2>Manque de souplesse</h2>
<h3>Au niveau des numéros</h3>
<p>OpenStreetMap, en général, connait les numéros des maisons, mais pas les informations de boite, appartement, étage&#8230; information que l&#8217;on retrouve très souvent dans le champ &#8220;numéro&#8221; des bases de données sur lesquelles nous avons travaillé.</p>
<p>On obtient donc bien un résultat pour &#8220;Avenue Fonsny 20, 1160 Bruxelles&#8221;, mais on ne reçoit aucun résultat pour &#8220;Avenue Fonsny 20 bte 2, 1160 Bruxelles&#8221;. Si nous écrivons, par contre, &#8220;Avenue Fonsny 20/2, 1160 Bruxelles&#8221;, OSM nous propose un résultat au niveau de la rue, en ignorant le numéro.</p>
<h3>Au niveau des noms</h3>
<p>Il s&#8217;agit d&#8217;être précis dans les noms que l&#8217;on fournit. OSM ne fournit par exemple aucun résultat pour les adresses suivantes&nbsp;: </p>
<ul>
<li>Avenue Fonsny 20, 1060 Bruxell<strong>e</strong></li>
<li>Avenue Fons<strong>ni</strong> 20, 1060 Bruxelles</li>
<li>Aven<strong>u</strong> Fonsny 20, 1060 Bruxelles</li>
</ul>
<h2>Manque de consistance du résultat</h2>
<p>L&#8217;inconvénient principal du modèle d&#8217;OpenStreetMap, où chaque contributeur peut ajouter des données à sa guise, est qu&#8217;il est difficile d&#8217;imposer une cohérence dans la façon d&#8217;introduire les données. </p>
<p>Le résultat d&#8217;une requête à Nominatim est un dictionnaire au format &#8220;json&#8221;, qui contient une entrée &#8220;address&#8221; dans laquelle on trouve les différentes parties de l&#8217;adresse. En analysant un grand nombre de ces résultats, nous avons trouvé le concept de &#8220;rue&#8221; dans pas moins de 7 champs: &#8220;road&#8221;, &#8220;pedestrian&#8221;,&#8221;footway&#8221;, &#8220;cycleway&#8221;, &#8220;path&#8221;, &#8220;address27&#8221;, &#8220;construction&#8221; (ainsi que, de façon plus marginale, dans &#8220;hamlet&#8221; ou &#8220;park&#8221;). Idem au niveau de la localité&nbsp;: &#8220;town&#8221;, &#8220;village&#8221;, &#8220;city_district&#8221;, &#8220;county&#8221;, &#8220;city&#8221;.</p>
<p>Si la distinction entre ces différents types de rue ou de localité a bien du sens, elle nous posait un problème&nbsp;: au final, nous devions produire un résultat avec une colonne &#8220;Rue&#8221; et une colonne &#8220;Localité&#8221;. </p>
<h2>Manque de précision</h2>
<p>Dans le résultat d&#8217;OSM, on trouve un champ &#8220;rank&#8221; indiquant le degré de précision&nbsp;: 30 si le bâtiment précis a été identifié ; 26 si seulement la rue a pu être localisée (<a href="https://wiki.openstreetmap.org/wiki/Nominatim/Development_overview#Country_to_street_level">plus de détails ici</a>). </p>
<p>En général, nous avons constaté que seuls 50% des résultats avaient un rank à 30, les autres seulement 26. Donc seulement 50% des adresses ont pu être localisées au niveau du bâtiment, les autres l&#8217;ayant été uniquement au niveau de la rue, alors que plus de 99% des adresses en entrée contenaient un numéro.</p>
<p>Par ailleurs, nous avons constaté que quand le numéro de bâtiment n&#8217;est pas connu d&#8217;OSM, nous avons soit pas du tout de résultat, soit un résultat sans numéro (rank à 26). Et dans de très nombreux cas sans résultat, il a suffi de renvoyer à Nominatim l&#8217;adresse sans numéro pour obtenir un résultat (de rank 26 en général). Nous ne sommes pas parvenu à identifier de critère qui justifiait la différence de traitement.</p>
<h1>Outils de nettoyage</h1>
<p>Face à ces limitations, nous avons identifié deux outils qui nous permettait de préparer les données avant de les envoyer à Nominatim&nbsp;:  Libpostal et Photon.</p>
<h2>Libpostal</h2>
<p>La librairie <a href="https://github.com/openvenues/libpostal">libpostal</a> est un utilitaire permettant de <em>parser</em> un adresse, c&#8217;est-à-dire identifier ses différentes composantes. Si on lui soumet par exemple &#8220;Smals, Avenue Fonsny 20 bte 5, 1060 Saint-Gilles&#8221;, on obtiendra comme résultat&nbsp;: </p>
<pre>[('smals', 'house'),<br /> ('avenue fonsny', 'road'),<br /> ('20', 'house_number'),<br /> ('bte 5', 'unit'),<br /> ('1060', 'postcode'),<br /> ('saint-gilles', 'city')]</pre>
<p>Il devient alors facile d&#8217;ignorer les éléments qui ne font pas réellement partie de l&#8217;adresse (&#8216;smals&#8217;, &#8216;house&#8217;) et ce qui décrit la boite ou l&#8217;étage (&#8216;bte 5&#8217;, &#8216;unit&#8217;), de façon à ne pas les envoyer à OSM. </p>
<h2>Photon</h2>
<p><a href="https://photon.komoot.de/">Photon</a> est utilitaire qui combine OpenStreetMap et ElasticSearch. Il permet de donner beaucoup de flexibilité, notamment en étant nettement moins sensible aux fautes de frappe. Il s&#8217;avère très utile dans un environnement interactif, où l&#8217;utilisateur peut choisir parmi une liste proposée par Photon, mais nous avons trouvé que dans un environnement &#8220;batch&#8221; (sans interaction avec un être humain), il n&#8217;était pas vraiment une alternative viable à OpenStreetMap, essentiellement parce qu&#8217;il fournit souvent énormément de résultats, parfois très éloignés de ce qui était attendu.</p>
<p>Par contre, nous avons trouvé qu&#8217;il s&#8217;agissait d&#8217;un excellent partenaire d&#8217;OpenStreetMap, permettant de préparer les données. Nous avons envoyé à Photon toutes les adresses qu&#8217;OpenStreetMap ne reconnaissait pas. Cela nous a donné un grand nombre de résultats, mais en utilisant la technique décrite ci-dessous, nous n&#8217;en avons gardé que ceux étant &#8220;raisonnablement proches&#8221; des données en entrée. Les adresses qui ont ainsi été légèrement modifiées sont renvoyées à OpenStreetMap.</p>
<h1>Vérification des résultats d&#8217;OSM</h1>
<p>Comme déjà évoqué, nous voulions limiter les risques de recevoir pour une adresse un résultat ne correspondant pas du tout à nos attentes. Sachant que nos données en entrée sont relativement structurées, il semblait relativement aisé de comparer, par exemple, la rue en entrée avec la rue du résultat, avec un algorithme de distance entre deux chaines de texte, comme (Damerau-)Levenshtein ou Jaro(-Winkler). </p>
<p>Pour la comparaison de rue, nous avons cependant fait face à un certain nombre d&#8217;obstacles. En particulier, il est fréquent le nom de la rue du résultat soit (légitimement) très éloigné du nom fourni à OSM. Voici quelques exemples&nbsp;:</p>
<table style="width: 98.6207%;" width="0">
<thead>
<tr>
<td style="width: 309px;" width="245">
<p><strong>Input</strong></p>
</td>
<td style="width: 263px;" width="208">
<p><strong>Output (result[&#8220;address&#8221;][&#8220;road&#8221;])</strong></p>
</td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 309px;" width="245">
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Rue%20des%20Bluets,%20crainhem&amp;format=jsonv2&amp;addressdetails=1">Rue des Bluets, Crainhem</a></p>
</td>
<td style="width: 263px;" width="208">
<p>Korenbloemenstraat</p>
</td>
</tr>
<tr>
<td style="width: 309px;" width="245">
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Rue%20Jean-Baptiste%20Stouffs,%20Rixensart&amp;format=jsonv2&amp;addressdetails=1">Rue Jean-Baptiste Stouffs, Rixensart</a></p>
</td>
<td style="width: 263px;" width="208">
<p>Rue J-B Stouffs</p>
</td>
</tr>
<tr>
<td style="width: 309px;" width="245">
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Place%20Communale,%20Rixensart&amp;format=jsonv2&amp;addressdetails=1">Place Communale, Rixensart</a></p>
</td>
<td style="width: 263px;" width="208">
<p>Place de la Vieille Taille</p>
</td>
</tr>
<tr>
<td style="width: 309px;" width="245">
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Parvis%20de%20la%20Basilique,%20Bruxelles&amp;format=jsonv2&amp;addressdetails=1">Parvis de la Basilique, Bruxelles</a></p>
</td>
<td style="width: 263px;" width="208">
<p>R20</p>
</td>
</tr>
</tbody>
</table>
<p>Le premier cas s&#8217;explique par le fait que la langue dans laquelle l&#8217;adresse a été encodée (le français dans l&#8217;exemple) ne correspond pas à la langue officielle de la ville en question (le néerlandais). </p>
<p>Dans le deuxième cas, il arrive en particulier quand la rue porte le nom d&#8217;une personne, que le prénom soit complet, abrégé ou absent, dans l&#8217;adresse en entrée comme dans le résultat. </p>
<p>Le troisième cas est une conséquence de l&#8217;évolution des noms des rues et autre place. La place communale a en l&#8217;occurrence été rebaptisée, et OSM connait tant le nouveau nom que l&#8217;ancien, mais renverra toujours le nom actuel dans le résultat. </p>
<p>Le dernier cas concerne surtout les grands axes, qui peuvent à la fois avoir un nom local (un nom de rue) et un nom plus large, quand elles font partie d&#8217;un axe plus important, comme ici une nationale.</p>
<p>Tous ces exemples illustrent le fait qu&#8217;OSM connait dans de nombreux cas plusieurs dénominations pour une seule rue. Ces différentes dénominations sont utilisées pour reconnaître un nom, mais la dénomination du résultat ne correspond pas nécessairement à celle qui a permis de le trouver. </p>
<p>Heureusement, un simple ajout du paramètre &#8220;namedetails=1&#8221; à la requête vers Nominatim permettra d&#8217;obtenir toutes les dénominations connues pour l&#8217;axe en question. Pour le premier exemple, on aura dans la requête suivante&nbsp;: </p>
<p><a href="https://nominatim.openstreetmap.org/search.php?q=Rue%20des%20Bluets,%20Crainhem&amp;format=jsonv2&amp;addressdetails=1&amp;namedetails=1">https://nominatim.openstreetmap.org/search.php?q=Rue%20des%20Bluets,%20Crainhem&amp;format=jsonv2&amp;addressdetails=1&amp;namedetails=1</a></p>
<p>un bloc supplémentaires (&#8220;namedetails&#8221;) contenant les valeurs suivantes&nbsp;: </p>
<pre>{"name":"Korenbloemenstraat",<br /> "name:fr":"Rue des Bluets",<br /> "name:nl":"Korenbloemenstraat"}</pre>
<h1>Conclusion</h1>
<p>À travers cet exercice, nous avons pu prendre mesure de la complexité que représentait le nettoyages d&#8217;adresses postales. Un outil tel qu&#8217;OpenStreetMap, optionnellement installé localement, permettra à moindre coût de corriger une grande partie des données. Mais il se peut, en fonction de la qualité des données à traiter, que le résultat (principalement en termes de proportion d&#8217;adresses correctement nettoyées) ne soit pas à la hauteur des attentes. Heureusement, nous verrons dans notre prochain article qu&#8217;avec un peu de travail et quelques outils adaptés, il est possible de notablement améliorer les performances du nettoyage.</p>
<p>____________</p>
<p><em>Ce post est une contribution individuelle de Vandy Berten, Data Science Expert chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>
<p> </p>
<p> </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/geocodage-contourner-les-lacunes-dopenstreetmap-partie-1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Comparer des géocodeurs</title>
		<link>https://www.smalsresearch.be/comparer-des-geocodeurs/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Mon, 30 Nov 2015 09:29:25 +0000</pubDate>
				<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[GIS]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=9152</guid>

					<description><![CDATA[Nous sommes en plein cœur de Londres, quartier Soho. Fin août 1854, une épidémie de choléra fait rage, 616 personnes perdent la vie. La &#8220;théorie des miasmes&#8221;, qui estime que le choléra &#8211; comme la peste &#8211; se propage par l&#8217;air, convainc la majorité des scientifiques. Sauf un certain John Snow. Pour étayer son intuition, il a une idée [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: justify;">Nous sommes en plein cœur de Londres, quartier Soho. Fin août 1854, une <a href="https://fr.wikipedia.org/wiki/%C3%89pid%C3%A9mie_de_chol%C3%A9ra_de_Broad_Street_(1854)" target="_blank" rel="noopener">épidémie de choléra fait rage</a>, 616 personnes perdent la vie. La &#8220;théorie des miasmes&#8221;, qui estime que le choléra &#8211; comme la peste &#8211; se propage par l&#8217;air, convainc la majorité des scientifiques. Sauf un certain <a href="https://fr.wikipedia.org/wiki/John_Snow" target="_blank" rel="noopener">John Snow</a>. Pour étayer son intuition, il a une idée aussi simple que géniale. Il répertorie l&#8217;adresse de chacun des décès, et les replace sur une carte (voir ci-contre, en rouge). <a href="/wp-content/uploads/2015/11/JohnSnow.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="alignleft wp-image-9153 size-medium" src="/wp-content/uploads/2015/11/JohnSnow-e1446553751298-300x208.png" alt="JohnSnow" width="300" height="208" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/11/JohnSnow-e1446553751298-300x208.png 300w, https://www.smalsresearch.be/wp-content/uploads/2015/11/JohnSnow-e1446553751298-768x534.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/11/JohnSnow-e1446553751298.png 885w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>L&#8217;évidence apparaît alors&nbsp;: les cas se répartissent de façon concentrique, autour du milieu de &#8220;Broad Street&#8221; (aujourd&#8217;hui &#8220;Broadwick Street&#8221;), et diminue à mesure qu&#8217;on s&#8217;en éloigne. Et au milieu de cette rue, se trouve justement une pompe à eau (point bleu sur la carte, <a href="https://www.google.be/maps/@51.5134846,-0.1361266,3a,75y,305.57h,72.58t/data=!3m6!1e1!3m4!1swcZXbL090o8xYmrVOnTjZA!2e0!7i13312!8i6656" target="_blank" rel="noopener">encore visible à l&#8217;heure actuelle</a>)&nbsp;!</p>
<p style="text-align: justify;">Le contexte d&#8217;aujourd&#8217;hui a changé, mais le besoin est plus que jamais présent&nbsp;: à partir d&#8217;une liste d&#8217;adresses de clients, de patients, de citoyens, de chantiers, de succursales, de nombreuses sociétés ou organismes publiques ont besoin de visualiser des données sur une carte. Si John Snow, connaissant bien le quartier, a pu localiser sur une carte chaque adresse de sa liste, cette opération peut aujourd&#8217;hui se faire automatiquement&nbsp;: c&#8217;est le rôle d&#8217;un géocodeur.</p>
<p><figure id="attachment_9157" aria-describedby="caption-attachment-9157" style="width: 150px" class="wp-caption alignleft"><a href="/wp-content/uploads/2015/11/Map_bubble.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-9157 size-thumbnail" src="/wp-content/uploads/2015/11/Map_bubble-150x150.png" alt="Map_bubble" width="150" height="150" /></a><figcaption id="caption-attachment-9157" class="wp-caption-text">Carte de type &#8220;Bubble&#8221; (avec Qlik Sense)</figcaption></figure></p>
<p><figure id="attachment_9158" aria-describedby="caption-attachment-9158" style="width: 150px" class="wp-caption alignright"><a href="/wp-content/uploads/2015/11/Heatmap.png" target="_blank" rel="noopener"><img loading="lazy" decoding="async" class="wp-image-9158 size-thumbnail" src="/wp-content/uploads/2015/11/Heatmap-150x150.png" alt="Heatmap" width="150" height="150" /></a><figcaption id="caption-attachment-9158" class="wp-caption-text">Heatmap (avec CartoDB)</figcaption></figure></p>
<p style="text-align: justify;">À partir d&#8217;une adresse postale (Rue Fonsny 20, 1060 Bruxelles), un géocodeur fournit typiquement un couple de coordonnées géographiques&nbsp;: 50.8361263, 4.3382716 (selon le standard WGS84, utilisé entre autres par les GPS, et qui diffère de la notation traditionnelle apprise à l&#8217;école&nbsp;: 50°50&#8217;10.1&#8243;N, 4°20&#8217;17.8&#8243;E). Une fois la liste des coordonnées obtenue, on peut typiquement en réaliser une carte de type &#8220;bubble&#8221; (la taille et la couleur des points pouvant dépendre d&#8217;un paramètre quelconque), ou une &#8220;heatmap&#8221;, mettant en évidence la densité des points.</p>
<h1 style="text-align: justify;">Géocodeurs</h1>
<p style="text-align: justify;">Il existe de nombreux outils permettant ce géocodage. Une partie de ces outils sont des interfaces web simples, dans lesquelles on envoie typiquement un fichier (listing Excel, par exemple), dont chaque adresse est géocodée avant, pour certains, d&#8217;être affichée sur une carte&nbsp;: <a href="https://www.google.com/fusiontables/data?dsrcid=implicit" target="_blank" rel="noopener">Google Fusion Table</a>, <a href="https://cartodb.com" target="_blank" rel="noopener">CartoDB</a>, <a href="https://fr.batchgeo.com/" target="_blank" rel="noopener">BatchGeo </a>ou <a href="https://www.easymapmaker.com/" target="_blank" rel="noopener">EasyMapMaker </a>en sont quelques exemples. En version gratuite, ces outils sont cependant assez contraignants. Soit le débit est fortement limité, soit le nombre de requêtes est limité à quelques dizaines, voire quelques centaines par mois.</p>
<p style="text-align: justify;">Dans la suite de cet article, nous allons nous intéresser à des outils moins &#8220;grand public&#8221;, nécessitant un peu de programmation (dont nous passerons les détails), et ayant des contraintes nettement moins limitatives. Il s&#8217;agit d&#8217;API (Application Programming Interface) que l&#8217;on invoque soit via un script, soit, dans notre cas, via un outil tel <a href="https://openrefine.org/" target="_blank" rel="noopener">qu&#8217;OpenRefine</a>. Nous allons considérer les API de Google (<a href="https://developers.google.com/maps/documentation/geocoding/intro" target="_blank" rel="noopener">Google Maps</a>), <a href="https://wiki.openstreetmap.org/wiki/Nominatim" target="_blank" rel="noopener">OpenStreetMap</a>, Microsoft (<a href="https://msdn.microsoft.com/en-us/library/ff701714.aspx" target="_blank" rel="noopener">Bing</a>), Nokia (<a href="https://developer.here.com/rest-apis" target="_blank" rel="noopener">Here</a>), <a href="https://developer.mapquest.com/" target="_blank" rel="noopener">MapQuest</a>, <a href="https://geocoder.opencagedata.com/" target="_blank" rel="noopener">OpenCageData</a>, ainsi qu&#8217;une version Beta de <a href="https://www.ign.be" target="_blank" rel="noopener">l&#8217;Institut Géographique National</a> belge (uniquement pour les adresses en Belgique).</p>
<p style="text-align: justify;">L&#8217;usage est en général assez simple. Par exemple, avec Google Maps, pour géocoder l&#8217;adresse &#8220;Avenue Fonsny 20, 1060 Bruxelles&#8221;, il suffit d&#8217;invoquer l&#8217;URL suivante (cliquer dessus pour voir le résultat)&nbsp;:</p>
<p style="text-align: justify;"><a href="https://maps.googleapis.com/maps/api/geocode/json?sensor=false&amp;address=Avenue%20Fonsy%2020,%201060%20Bruxelles" target="_blank" rel="noopener">http://maps.googleapis.com/maps/api/geocode/json?sensor=false&amp;<strong>address</strong>=<strong>Avenue</strong>%20<strong>Fonsy</strong>%20<strong>20</strong>,%20<strong>1060</strong>%20<strong>Bruxelles</strong></a></p>
<p style="text-align: justify;">Deux informations nous intéressent dans le résultat&nbsp;: les coordonnées géographiques, bien sûr, mais également la fiabilité (ou <em>confidence</em>, en anglais) du résultat. Dans notre cas, &#8220;RANGE_INTERPOLATED&#8221;, qui signifie que Google ne connaît pas la position exacte du numéro 20 de l&#8217;Avenue Fonsny, mais qu&#8217;il l&#8217;a interpolée à partir d&#8217;autres numéros de la même rue pour lesquelles il connait la localisation. Il se peut par exemple que Google Maps soit capable de localiser la ville, mais pas la rue. Il donnera alors la position du centre de la ville, et précisera comme qualité &#8220;GEOMETRIC_CENTER&#8221;.</p>
<p style="text-align: justify;">Toutes les API n&#8217;ont cependant pas la même façon de préciser la fiabilité du résultat. Il s&#8217;agit parfois d&#8217;une valeur entre 0 (très précis) et 10 (très peu précis), parfois de valeurs telles que &#8220;High&#8221;, &#8220;Medium&#8221; ou &#8220;Low&#8221;.</p>
<h1 style="text-align: justify;">Comparer la qualité</h1>
<p style="text-align: justify;">Ce n&#8217;est bien sûr pas parce qu&#8217;un géocodeur retourne des coordonnées et précise qu&#8217;elles sont d&#8217;une fiabilité optimale que le résultat est correct. Par exemple, la commune de Mons (province du Hainaut) est composée de plusieurs localités, dont Frameries (Code postal&nbsp;: 7022) et Jemappes (Code postal&nbsp;: 7012). À Frameries, il existe une rue nommée &#8220;Avenue Général Leman&#8221;, et à Jemappes, à 5 kilomètres de là, une &#8220;Rue du Général Leman&#8221;. Si l&#8217;on demande à Bing de localiser &#8220;Rue Léman, 7012 Mons&#8221;, il localise en fait l&#8217;Avenue Léman à 7022 Frameries, alors que Google Maps propose bien celle de Jemappes. Les deux géocodeurs annoncent par ailleurs un niveau de fiabilité élevé.</p>
<p style="text-align: justify;">Si l&#8217;on veut comparer les performances de plusieurs géocodeurs, on trouve dans la littérature (par exemple <a href="https://www.ij-healthgeographics.com/content/12/1/50" target="_blank" rel="noopener">ici</a>) une méthodologie qui consiste à se construire un grand ensemble d&#8217;adresses, dont on connaît les coordonnées géographiques précises, puis de les soumettre aux géocodeurs à tester pour voir à quel point les réponses sont compatibles avec la connaissance préalablement acquise.</p>
<h1 style="text-align: justify;">Méthodologie</h1>
<p style="text-align: justify;">L&#8217;inconvénient majeur de cette méthodologie est qu&#8217;il faut construire une telle base de connaissance, représentative de données qui seront ensuite utilisées. On ne pourra avec une telle méthodologie que comparer des régions connues des testeurs. Si deux géocodeurs orthographient une rue différemment, il faudrait quasiment se rendre sur place pour voir lequel se trompe. Nous proposons ici d&#8217;utiliser une méthodologie plus abordable, ne nécessitant aucune connaissance au préalable. L&#8217;idée est très simple&nbsp;: on part d&#8217;une liste d&#8217;adresses importante, et on géocode ensuite chacune de ces adresses avec une série de géocodeurs différents.</p>
<p style="text-align: justify;">Supposons que pour une adresse, cinq géocodeurs la localise dans un périmètre restreint, mais qu&#8217;un sixième géocodeur la situe à plusieurs kilomètres. On va supposer dans nos tests que ce dernier se trompe probablement, et on considère que si un géocodeur, pour un grand nombre d&#8217;adresses, se situe loin des autres, c&#8217;est qu&#8217;il est vraisemblablement de qualité moindre. Cette méthodologie n&#8217;a aucune prétention scientifique sérieuse. Il s&#8217;agit juste d&#8217;une réflexion, qui n&#8217;a pas été poussée aussi loin que si l&#8217;on se plaçait dans un contexte scientifique, mais qui nous a permis de nous éclairer dans une situation concrète rencontrée dans un contexte professionnel.</p>
<p style="text-align: justify;">Pour nos tests, nous avons considéré un ensemble de 10.000 adresses provenant de la <a href="https://kbopub.economie.fgov.be/kbo-open-data/login?lang=fr" target="_blank" rel="noopener">Banque Carrefour des Entreprises</a> en Belgique, disponibles en Open Data. 98.4% de ces entreprises ont leur adresse en Belgique, les autres à l&#8217;étranger. Il conviendra bien sûr de prendre des données propres à la région ou au pays pour lequel on souhaite tester les géocodeurs. La qualité des données est quelque part conforme à ce que l&#8217;on trouve en pratique. Par exemple, il manque le nom de la rue dans 0.4% des cas, le champ &#8220;numéro&#8221; contient autre chose qu&#8217;un numéro dans 2.1% des cas.</p>
<p style="text-align: justify;">Nous avons réalisé les géocodages en utilisant l&#8217;outil <a href="/publications/document/?docid=1" target="_blank" rel="noopener">OpenRefine</a>, et l&#8217;analyse a ensuite été faite avec <a href="/publications/document/?docid=146" target="_blank" rel="noopener">Qlik Sense</a>. L&#8217;analyse complète, nécessitant Qlik Sense, <a href="/publications/document/?docid=147" target="_blank" rel="noopener">peut être obtenue ici</a>.</p>
<h1 style="text-align: justify;">Match rate</h1>
<p style="text-align: justify;"><a href="/wp-content/uploads/2015/11/MatchRate.png"><img loading="lazy" decoding="async" class="alignleft size-medium wp-image-9162" src="/wp-content/uploads/2015/11/MatchRate-300x225.png" alt="MatchRate" width="300" height="225" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/11/MatchRate-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2015/11/MatchRate-768x576.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/11/MatchRate.png 800w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a>Une première métrique simple que nous avons considérée est le &#8220;Match rate&#8221;, à savoir la proportion d&#8217;adresses pour laquelle un géocodeur fournissait une réponse. On voit par exemple qu&#8217;OpenStreetMap (OSM) n&#8217;a pas pu géocoder à peu près un quart de nos adresses, alors que MapQuest (MQ) arrive à 0.01% d&#8217;échec. Le géocodeur (en phase Beta) de l&#8217;IGN (belge) a également encore du progrès à faire.</p>
<p style="text-align: justify;">Un haut &#8220;match rate&#8221; n&#8217;implique bien sûr pas une bonne qualité, mais on pourrait déjà être amené, à ce stade, à écarter l&#8217;IGN et OpenStreetMap des compétiteurs.</p>
<h1 style="text-align: justify;">Écart par rapport à la médiane</h1>
<p style="text-align: justify;"><a href="/wp-content/uploads/2015/11/Median1.png"><img loading="lazy" decoding="async" class="alignright wp-image-9167 size-full" src="/wp-content/uploads/2015/11/Median1.png" alt="" width="224" height="119" /></a>Pour évaluer si un géocodeur est éloigné de la majorité, nous considérons comme référence le point médian, c&#8217;est-à-dire un point laissant autant de points à droite qu&#8217;à gauche, et autant en bas qu&#8217;en haut. En effet, s&#8217;il y a un consensus, ce point se trouvera en général au cœur de ce consensus. Notons que ce point médian peut faire partie de l&#8217;ensemble (si la latitude médiane est fournie par le même point que la longitude médiane) ou être virtuellement ajouté.</p>
<p style="text-align: justify;">Dans l&#8217;exemple ci-dessus, le point médian est en rouge. On peut voir qu&#8217;un résultat est très éloigné du point médian, alors que 5 en sont très proches. Notons que si nous avions pris la moyenne et non la médiane, le point moyen aurait été situé entre agrégat de gauche et le point à droite, et tous les résultats auraient été considérés comme éloignés de la référence.</p>
<p><figure id="attachment_9164" aria-describedby="caption-attachment-9164" style="width: 300px" class="wp-caption alignleft"><a href="/wp-content/uploads/2015/11/AvgDistToMedian.png"><img loading="lazy" decoding="async" class="wp-image-9164 size-medium" src="/wp-content/uploads/2015/11/AvgDistToMedian-300x225.png" alt="AvgDistToMedian" width="300" height="225" /></a><figcaption id="caption-attachment-9164" class="wp-caption-text">Distance moyenne par rapport au point médian (en kilomètres)</figcaption></figure></p>
<p style="text-align: justify;">Le graphique ci-contre reprend la distance moyenne en kilomètres (par<a href="https://www.movable-type.co.uk/scripts/latlong.html" target="_blank" rel="noopener"> approximation équirectangulaire</a>) pour l&#8217;ensemble des adresses par rapport à leur médiane respective, pour chaque géocodeur. Plus la valeur est élevée, plus on s&#8217;éloigne souvent du consensus, et donc, selon notre méthodologie, moins bon est le géocodeur.</p>
<p><figure id="attachment_9165" aria-describedby="caption-attachment-9165" style="width: 300px" class="wp-caption alignright"><a href="/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ.png"><img loading="lazy" decoding="async" class="wp-image-9165 size-medium" src="/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ-300x225.png" alt="AvgDistToMedian_NoMQ" width="300" height="225" /></a><figcaption id="caption-attachment-9165" class="wp-caption-text">Distance moyenne par rapport au point médian (en kilomètres), en excluant MapQuest</figcaption></figure></p>
<p style="text-align: justify;">On constate très facilement que MapQuest, qui obtenait le meilleur match rate, est de très loin moins performant que tous les autres. En moyenne, les adresses géocodées par MapQuest sont localisées à plus de 2000 km des autres géocodeurs&nbsp;! En poussant un peu plus loin l&#8217;analyse, on se rend compte que pour à peu près 25% des adresses, MapQuest ne parvient pas à localiser l&#8217;adresse, et, plutôt que de retourner un code d&#8217;erreur ou un résultat vide, localise l&#8217;adresse &#8230; au milieu des États-Unis&nbsp;! Clairement donc à éliminer, en tout cas pour des adresses sur le territoire belge. Le graphique de droite supprime MapQuest.</p>
<p style="text-align: justify;">Ce qui surprend maintenant, ce sont les mauvais résultats de Here (8 kilomètres du point médian en moyenne&nbsp;!), et OpenCageData (OCD), près de 5 kilomètres. Ces mauvais scores ont en fait des raisons très différentes, que nous allons maintenant détailler.</p>
<h1 style="text-align: justify;">Here victime de son succès</h1>
<p style="text-align: justify;">Comme on a pu le voir plus haut, le &#8220;match rate&#8221; (proportion d&#8217;adresses pour lequel un géocodeur a fourni une réponse) est loin d&#8217;atteindre 100 % pour chaque adresse. Ce qui signifie que chaque adresse n&#8217;a pas 7 points (le nombre de géocodeurs de notre analyse) à comparer. Dans les faits, 70 % des adresses ont pu être géocodées (correctement ou non) par chacune des 7 API, 23 % par seulement 6, puis 5.7 % (5 géocodeurs), 1.1% (4), 0.2 % (3),  0.3 % (2) et 0.07 % (1).</p>
<p style="text-align: justify;">Or, Here et MapQuest sont les deux géocodeurs avec le meilleur <em>match rate</em>, et un nombre non négligeable d&#8217;adresses ont été situées uniquement par MapQuest aux États-Unis (comme expliqué ci-dessus), et par Here au bon endroit, avec un écart dépassant souvent les 10.000 kilomètres. Or la médiane entre deux nombres est, dans l&#8217;outil que nous avons utilisé (Qlik Sense), la moyenne de ceux-ci. Ce qui nous fait un point de référence au milieu de l&#8217;océan Atlantique, les deux points étant alors considérés comme de 4 à 5000 kilomètres du point médian.</p>
<p style="text-align: justify;">Pour éviter ce biais, nous pouvons supprimer toutes les adresses ayant été géocodées avec succès par moins de quatre géocodeurs (soit une soixantaine d&#8217;adresses). En supprimant de la comparaison 0.6 % des adresses, on obtient un résultat pour Here nettement meilleur, comme le montre le graphique ci-dessous.</p>
<h1 style="text-align: justify;">OpenCageData&nbsp;: souvent uniquement la ville</h1>
<p><figure id="attachment_9184" aria-describedby="caption-attachment-9184" style="width: 300px" class="wp-caption alignleft"><a href="/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ_GTE4matches.png"><img loading="lazy" decoding="async" class="wp-image-9184 size-medium" src="/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ_GTE4matches-300x225.png" alt="AvgDistToMedian_NoMQ_GTE4matches" width="300" height="225" srcset="https://www.smalsresearch.be/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ_GTE4matches-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ_GTE4matches-768x576.png 768w, https://www.smalsresearch.be/wp-content/uploads/2015/11/AvgDistToMedian_NoMQ_GTE4matches.png 800w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption id="caption-attachment-9184" class="wp-caption-text">Distance moyenne par rapport au point médian (en kilomètres), en excluant MapQuest, et toutes les adresses géocodées moins de 4 fois.</figcaption></figure></p>
<p style="text-align: justify;">On voit maintenant qu&#8217;OpenCageData (OCD) possède la distance moyenne à la médiane la plus élevée&nbsp;: plus de deux kilomètres&nbsp;! Si un GPS avait cette précision-là, on aurait du mal à trouver son chemin&nbsp;!</p>
<p style="text-align: justify;">Mais l&#8217;on peut s&#8217;intéresser au niveau de fiabilité associé à ces adresses. Pour chaque adresse géocodée, OpenCageData retourne également une valeur entre 0 (peu fiable) et 10 (très fiable). Sur les 10.000 adresses à géocoder, 3800 ont reçu un code &#8220;0&#8221;. Et en effet, pour la plupart de ces adresses, l&#8217;API a été capable de trouver la ville, mais pas la rue. On a donc des coordonnées qui correspondent au centre de la ville. Si l&#8217;on ne s&#8217;intéresse qu&#8217;à ces adresses-là, la distance moyenne à la médiane est de 4 kilomètres (pour un peu moins d&#8217;un kilomètre pour les autres, ce qui reste important).</p>
<p style="text-align: justify;">On peut également remarquer que l&#8217;IGN et OpenStreetMap, même si elles n&#8217;ont pas un très bon &#8220;match rate&#8221;, semblent avoir une bonne précision (si l&#8217;on accepte le postulat que le point médian est, en générale, une approximation acceptable de la bonne réponse). Il semblerait que ces outils, contrairement à MapQuest, préfèrent, quand ils ne sont pas sûrs de la réponse, ne pas répondre plutôt que de donner une réponse aléatoire.</p>
<p style="text-align: justify;">En dehors de l&#8217;IGN (qui n&#8217;a marché que sur 88% des adresses), le géocodeur qui se comporte le mieux par rapport au point médian est Bing, de Microsoft. La distance moyenne par rapport au point médian est de 230 mètres.</p>
<h1 style="text-align: justify;">Distribution</h1>
<p style="text-align: justify;"><a href="/wp-content/uploads/2015/11/Distribution.png"><img loading="lazy" decoding="async" class="alignright wp-image-9179" src="/wp-content/uploads/2015/11/Distribution-1024x683.png" alt="Distribution" width="400" height="267" /></a>Si la moyenne d&#8217;un ensemble de valeurs donne une information intéressante sur cet ensemble, la distribution complète est beaucoup plus riche. C&#8217;est ce que montre le graphique ci-contre. Il y regroupe les adresses par distance à la médiane, pour chaque géocodeur. On peut par exemple y voir que pour Bing et Here (bleu clair et turquoise), 85 % des adresses ont été géocodées dans un rayon de 100 mètres par rapport à la médiane et 10% entre 100 mètres et un kilomètre. On y voit également que pour OpenCageData, environ un tiers des adresses sont dans un rayon de 100 mètres par rapport à la médiane ; un autre (petit) tiers entre 100 mètres et 1 kilomètres, et un dernier tiers entre 1 et 10 kilomètres. On peut aussi apercevoir le pic que MapQuest présente entre 1000 et 10.000 kilomètres ; il s&#8217;agit des +/-25% d&#8217;adresses localisées aux États-Unis.</p>
<p style="text-align: justify;">Selon notre méthodologie, on peut estimer que plus une distribution est &#8220;collée sur la gauche&#8221; (c&#8217;est-à-dire place un maximum de résultats dans la case 0-100 mètres), meilleure elle est. Google Maps et l&#8217;IGN restent dans le groupe de tête, juste derrière Here et Bing.</p>
<h1 style="text-align: justify;">Conclusion</h1>
<p style="text-align: justify;">Si le postulat de base (le point médian est une bonne approximation de la position correcte) est contestable, il nous a permis néanmoins de mettre en évidence des problèmes que nous aurions difficilement pu localiser autrement&nbsp;: les 25% d&#8217;adresses que MapQuest localise erronément au milieu des États-Unis, ou les 38% d&#8217;adresses pour lesquelles OpenCageData localise la ville mais pas la rue. Nous avons le sentiment, suite à notre analyse, que Here et Bing fournissent des réponses de meilleure qualité que Google Maps, mais une étude plus poussée serait clairement nécessaire pour en avoir la certitude.</p>
<p style="text-align: justify;">Si la méthodologie peut s&#8217;appliquer pour toute région géographique, les conclusions que nous tirons ici ne sont valables que pour des adresses majoritairement localisées sur le territoire belge. Il se pourrait par exemple très bien que pour des adresses américaines, MapQuest surpasse tous les autres.</p>
<p style="text-align: justify;">Le modèle souffre encore de certains défauts, sources d&#8217;améliorations futures. On pourrait par exemple, avant de considérer le point médian comme référence, s&#8217;assurer qu&#8217;il se situe bien au sein d&#8217;un cluster de petite taille. Il arrive par exemple qu&#8217;une adresse soit localisée par seulement trois géocodeurs, une fois à la côte belge, une fois dans le fin fond des Ardennes et troisième fois en Amérique du Sud. Ce genre de cas devrait être éliminés de la comparaison, parce qu&#8217;aucun de ces trois points n&#8217;a de raison de servir de point de référence. Nous l&#8217;avons fait, mais cela n&#8217;a pas eu un impact notable sur les conclusions (si ce n&#8217;est que Here dépasse alors légèrement Bing en termes de distance moyenne par rapport au point médian).</p>
<p style="text-align: justify;">Il serait également intéressant, avoir d&#8217;effectuer le géocodage, de faire passer la liste d&#8217;adresses par un outil de &#8220;Data Quality&#8221;, de façon à nettoyer toutes les adresses incomplètes ou mal formatées. Ou encore, quand cela s&#8217;applique, de comparer la différence entre fournir une adresse sous forme d&#8217;une seule chaîne de caractères, ou bien déjà découpée en ses différents composants (rue, numéro, code postal&#8230;).</p>
<p style="text-align: justify;">On peut aussi, au lieu de s&#8217;intéresser à la distance au point médian, au nombre de fois que l&#8217;on s&#8217;en éloigne de, par exemple, plus d&#8217;un kilomètre. Un graphique dans ce sens est <a href="/publications/document/?docid=147" target="_blank" rel="noopener">disponible sur notre <em>dashboard nécessitant Qlik Sense</em></a><strong><em>.</em> </strong>Nous serons bien évidemment heureux de faire une analyse plus poussée avec nos clients et partenaires qui en feront la demande&nbsp;!</p>
<p style="text-align: justify;">
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
