[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