[OSM-talk-be] Export database

Karel Adams fa348739 at skynet.be
Wed Oct 1 08:44:03 UTC 2014


Na enige stilte wegens andere prioriteiten heb ik dit netjes aan het 
werk gekregen.
Als er nog eens een Linuxiaan zoiets wil doen, hier is mijn oplossing:

1) query om overpass aan te spreken:

<osm-script>
   <query type="node">
     <has-kv k="place" v="town"/>
     <bbox-query e="8" n="54"   s="49"   w="2"  />
   </query>
   <print/>
</osm-script>

2) command-line om met deze query aan te kloppen bij overpass:

wget -O $TMPFIL --post-file=overpass_query 
"http://overpass-api.de/api/interpreter"

3) een handjevol python code om de xml te parsen tot csv zoals een 
die-hard unixiaan verder vermaalt met awk en sed en zo:

import codecs
import xml.etree.cElementTree as ET
tree = ET.parse('target.osm')
root = tree.getroot()

allnodes=root.findall('node')
for node in allnodes:
  lat=node.get('lat')
  lon=node.get('lon')
  cityname=''
  population=0
  for tag in node.findall('tag'):
   if tag.attrib['k'] == 'name':
    cityname = tag.attrib['v']
   if tag.attrib['k'] == 'population':
    try:
     population = int(tag.attrib['v'])
    except:
     pass

  print("{},{},{},{}".format(lat,lon,cityname.encode('utf-8'),population))

Vragen:

1) de 'population' is niet overal ingevuld, en sommige getallen zijn zo 
rond dat ik ze niet erg betrouwbaar vind. Vervelend dat de info vooral 
schijnt te ontbreken bij middelgrote steden in Vlaanderen (Turnhout, 
Mol, Mechelen...) Is er een betere manier om aan de bevolkingsaantallen 
per stad te geraken? Het komt niet echt aan op de precieze getallen, de 
bedoeling is om de "lokaliteiten" te kunnen categoriseren (bv. meer dan 
5000, meer dan 20000, meer dan 300000)

2) her en der lees ik dat het 'not done' zou zijn om API's te gebruiken 
voor downloads - en op deze mailinglist werd me dat net aanbevolen? Ik 
wil overigens best overwegen om een extra parameter mee te geven om de 
prioriteit te verlagen, dit is toch een batchproces dat gerust enkele 
uren mag staan draaien. En ik maak me niet al te veel gewetensbezwaren 
over het overbelasten van de overpass-server want dit is behoorlijk 
statische data, die ga ik neit om de haverklap refreshen, misschien maar 
één keertje per jaar of zo.

Karel

NB voor wie het interesseert: bovenstaande query, "de benelux en 
aanpalende" gaf me 1207 lokaliteiten; van 907 daarvan is het 
inwonersaantal aangegeven.






More information about the Talk-be mailing list