<div class="gmail_quote">2012/12/22 Sander Deryckere <span dir="ltr"><<a href="mailto:sanderd17@gmail.com" target="_blank">sanderd17@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
After the articles about  the addresses in Germany (where every average German contributor should gather 1000 addresses), I wondered how we were doing in Belgium. So I downloaded the address information in Belgium and did some counting.<br>


<br>I only counted the addr:housenumber and addr:street tags. I didn't occupy myself with the associatedstreet relations, as I've not that often seen those on their own. If you think I'm wrong, I can do my counting again. I also didn't take the addr:interpolation into account. Just because it's difficult to analyse it.<br>


<br><img src="" alt=""><br>

<br>The first thing you notice is that there are a lot of features with housenumber information, but without street information. While other information (such as city) can be determined from closed boundaries. It's often ambiguous and hard to determine the street from other OSM features. <br>


<br>Some applications (s.a. Nominatim) implement the "street guessing", sometimes with wrong results. Other apps (s.a. OsmAnd) just don't include houses without street information in their search, so that info is completely lost.<br>


<br>Now, how many addresses would be missing. We can't assume Belgium has 11 million addresses, as many people live together. So I searched other data. The number of addresses in Belgium seems impossible to find, but I did find the number of families in Belgium: <a href="http://www.centrumvoorsociaalbeleid.be/indicatoren/index.php?q=node/176" target="_blank">http://www.centrumvoorsociaalbeleid.be/indicatoren/index.php?q=node/176</a>. I assume that the number of addresses must be about the same. There are addresses without families (like firms) and multiple families living in one apartment with one address (but often different post boxes). <br>


<br>So that means we're needing about 4.5 million addresses and currently have 112 000. The completeness is thus about 2.5% of address data. Not a very good number. When searching 40 addresses, only 1 on average will be found in OSM.<br>


<br>But it becomes better when we look how the data evolved. Of that 112 000 addresses, there are 76 000 created (or modified) in 2012 and 105 000 since 2011. That means that the number of addresses created is going up  If we can keep a bit of growth, we could map the majority of addresses in a few years.<br>


<br>So continue with the effort, and map as many addresses as possible.<br><br><b>How to map?</b><br><br>There's also a lot of armchair mapping that can be done. First of all, all that streetnames that need to be added. People are better in guessing the right streetname, and if there's doubt, just add a fixme tag.<br>


<br>Next to that, if you see a restaurant on the map, without address data, just search the website of that restaurant and get the address data from there. You're doing nothing wrong, as long as you don't take the data from a database (such as the golden pages), you aren't violating any copyrights or database rights. While you're at the website of the restaurant, you can also add other information s.a. opening hours or phone number.<br>


<br>Of course, when the weather is good, you can go out and map addresses. I normally use photo mapping because it's so fast (and if you see an other feature, you can also just take a picture of it), but there are also apps for that, s.a. the Keypadmapper app for Android.<br>
</blockquote><div><br>I was curious about some actual statistics, so I used Sander's Overpass query (somewhat modified to include asscociatedStreet relations):<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
area[name="België - Belgique - Belgien"];<br>(<br>  node(area);<br>  <;<br>) -> .allnodeswaysrelationsinBelgium;<br>(<br>  rel.allnodeswaysrelationsinBelgium["type"="associatedStreet"];<br>
) -> .allassociatedStreetrelations;<br>(<br>  rel.allnodeswaysrelationsinBelgium["addr:housenumber"];<br>) -> .alladdr_housenumberrelations;<br>(<br>  way.allnodeswaysrelationsinBelgium["addr:housenumber"];<br>
) -> .alladdr_housenumberways;<br>(<br>  node.allnodeswaysrelationsinBelgium["addr:housenumber"];<br>) -> .alladdr_housenumbernodes;<br>(<br>  .allassociatedStreetrelations;<br>  .allassociatedStreetrelations >;<br>
  .alladdr_housenumberrelations;<br>  .alladdr_housenumberrelations >;<br>  .alladdr_housenumberways;<br>  .alladdr_housenumberways >;<br>  .alladdr_housenumbernodes;<br>);<br>out meta qt; <br></blockquote><div><br>
Then some Python magic with SAX to extract the users from the xml:<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">import xml.sax<br><br>''' sample data:<br>
  <node id="1248089374" lat="51.2509015" lon="5.5448618" version="1" timestamp="2011-04-17T09:51:55Z" changeset="7884790" uid="9176" user="Maarten Deen"><br>
    <tag k="addr:city" v="Hamont"/><br>    <tag k="addr:country" v="BE"/><br>    <tag k="addr:housenumber" v="32"/><br>    <tag k="addr:postcode" v="3930"/><br>
    <tag k="addr:street" v="Stad"/><br>    <tag k="amenity" v="bank"/><br>    <tag k="atm" v="yes"/><br>    <tag k="name" v="BNP Paribas Fortis"/><br>
  </node><br>  <way id="165086472" version="1" timestamp="2012-05-26T21:27:01Z" changeset="11710662" uid="436365" user="escada"><br>    <nd ref="1766686928"/><br>
    <nd ref="1766686927"/><br>    <nd ref="1766686912"/><br>    <nd ref="1766686914"/><br>    <nd ref="1766686928"/><br>    <tag k="addr:housenumber" v="1"/><br>
    <tag k="addr:street" v="Route de l'Arboretum"/><br>    <tag k="building" v="yes"/><br>    <tag k="source" v="bing2012"/><br>  </way><br>
'''<br><br>class OSMContentHandler(xml.sax.ContentHandler):<br>    def __init__(self):<br>        xml.sax.ContentHandler.__init__(self)<br>        self.noteattributes = {}<br>        self.tags = {}<br>        self.users = {}<br>
<br>    def startElement(self, tagname, attrs):<br>        if tagname == "tag":<br>            self.tags[attrs.getValue("k")] = attrs.getValue("v")<br>        elif tagname in ["node", "way", "relation"]:<br>
            self.noteattributes = attrs<br>            self.tags = {}<br><br>    def endElement(self, tagname):<br>        if tagname in ["node", "way", "relation"]:<br>            if 'addr:housenumber' in self.tags:<br>
                if self.noteattributes['user'] in self.users:<br>                    self.users[self.noteattributes['user']] += 1<br>                else:<br>                    self.users[self.noteattributes['user']] = 1<br>
    def endDocument(self):<br>        with open("C:/data/usercount.csv", mode='w', encoding='utf-8') as csvfile:<br>            for key in self.users:<br>                csvfile.write(key + ';' + str(self.users[key]) + '\r\n')<br>
<br>def main(sourceFileName):<br>    source = open(sourceFileName, encoding='utf-8')<br>    xml.sax.parse(source, OSMContentHandler())<br><br>if __name__ == "__main__":<br>    main('C:/Data/OSM/addressesInBelgium.osm') <br>
</blockquote><div><br>As usual with OSM data, this only takes the last user who modified the object into account, so it's a bit skewed, given that it's often the first user who did the hardest work... But digging in the history of those elements to find out when exactly the house number was added would lead a bit too far.<br>
<br><br>And the winner is:<br><br>
 <table border="0" cellpadding="0" cellspacing="0" width="192"><colgroup><col style="width:48pt" span="3" width="64">
 </colgroup><tbody><tr style="height:14.4pt" height="19">
  <td style="height:14.4pt;width:48pt" height="19" width="64">TAA</td>
  <td style="width:48pt" align="right" width="64">35216</td>
  <td style="width:48pt" width="64">Amazing!</td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">escada</td>
  <td align="right">15131</td>
  <td>Impressive</td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">zors1843</td>
  <td align="right">9293</td>
  <td>Keep it up</td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Polyglot</td>
  <td align="right">7336</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Sanderd17</td>
  <td align="right">5515</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Patrick Bous</td>
  <td align="right">3600</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">lodde1949</td>
  <td align="right">3070</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">ivodeb</td>
  <td align="right">2705</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">eMerzh</td>
  <td align="right">2549</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">GuyVV</td>
  <td align="right">1864</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Filip</td>
  <td align="right">1844</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">orioane</td>
  <td align="right">1615</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">meet00</td>
  <td align="right">1422</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">rob72</td>
  <td align="right">1394</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Scapor</td>
  <td align="right">1102</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">D!zzy</td>
  <td align="right">873</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Runner42</td>
  <td align="right">707</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">susvhv</td>
  <td align="right">703</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Philippe D</td>
  <td align="right">679</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Eimai</td>
  <td align="right">654</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">raskas</td>
  <td align="right">628</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">pweemeeuw</td>
  <td align="right">458</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Sebke</td>
  <td align="right">442</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">OlivierCO</td>
  <td align="right">427</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Renaud Michel</td>
  <td align="right">426</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Kurt Roeckx</td>
  <td align="right">403</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">CyFo</td>
  <td align="right">369</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Ben Abelshausen</td>
  <td align="right">340</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">xybot</td>
  <td align="right">334</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">moyogo</td>
  <td align="right">318</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td class="xl65" style="height:14.4pt;text-align:left" height="19">jan/42</td>
  <td align="right">305</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">ivom</td>
  <td align="right">293</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">SPQRobin</td>
  <td align="right">284</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">jvh</td>
  <td align="right">253</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">martino260</td>
  <td align="right">253</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Jorieke V</td>
  <td align="right">250</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">toeklk</td>
  <td align="right">234</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">linusable</td>
  <td align="right">223</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">JDub</td>
  <td align="right">196</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">cimm</td>
  <td align="right">194</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">fmarchal</td>
  <td align="right">183</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Tbj</td>
  <td align="right">176</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Victor LP</td>
  <td align="right">173</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">jbwi</td>
  <td align="right">157</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">JoBru</td>
  <td align="right">155</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">rtega</td>
  <td align="right">150</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">M!dgard</td>
  <td align="right">145</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Jacques Lys</td>
  <td align="right">141</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">boskoyevsky</td>
  <td align="right">140</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Oli-Wan</td>
  <td align="right">139</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Greggo</td>
  <td align="right">138</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">btrs</td>
  <td align="right">134</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Loll78</td>
  <td align="right">131</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Toi</td>
  <td align="right">131</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Piwi</td>
  <td align="right">131</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Maarten Deen</td>
  <td align="right">129</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">QuercE</td>
  <td align="right">122</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Glenn Plas</td>
  <td align="right">111</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Med</td>
  <td align="right">110</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Eric Goris</td>
  <td align="right">109</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">DJ_frombelgium</td>
  <td align="right">107</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Lithion</td>
  <td align="right">106</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Jowielen</td>
  <td align="right">104</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">Skratz</td>
  <td align="right">104</td>
  <td><br></td>
 </tr>
 <tr style="height:14.4pt" height="19">
  <td style="height:14.4pt" height="19">guidostraat</td>
  <td align="right">102</td>
  <td><br></td>
 </tr>
</tbody></table><br><br>188 contributors added at least 10 addresses<br>508 added at least 2<br>917 added at least 1 address in Belgium<br><br>Polyglot<br></div></div></div></div>