On Fri, Jan 29, 2010 at 03:16:11PM +0200, Albertas Agejevas wrote: > Na, kolegos, upgradinam magistralinius kelius į trunk, krašto į > primary, rajoninius į secondary? Argumentai už: > > * harmonizacija su kaimyninėm šalim; > > * bus realesnis kelių tinklo vaizdas aukštesniuose zoom lygiuose.
OK, skriptas jau veikia. Už kelių minučių migraciją turi įvykt. Mintis tokia, kad LT kelių sąrašas imamas iš Lietuvos geofabrik.de dump'o, tada kiekvienas kelias atsisiunčiamas iš serverio ir pataisomas, ir susiunčiamas atgal. Prikabinu skriptą ir testinį duomenų setą. Skripte įrašyti adresai ir kredencialai testiniam servery, galit eksperimentuot :) Reikia dar wiki atnaujint. Albertas
#!/usr/bin/env python
"""osm-convert.py -- retag Lithuanian roads by their ref tag.
The roads are tagged as follows:
Magistraliniai (refs like A1, A15) -- trunk
Krašto (refs like 102, 207) -- primary
Rajoniniai (refs like 1007, 5218) -- secondary
"""
from lxml.etree import parse, tostring
from bz2 import BZ2File
import re
from StringIO import StringIO
from httplib import HTTPConnection
rajoninis = re.compile("[0-9]{4}")
krasto = re.compile("[0-9]{3}")
magistralinis = re.compile("[Aa][0-9]+")
changeset_body = """\
<osm>
<changeset>
<tag k="created_by" v="osm-convert.py"/>
<tag k="comment" v="Promoting magistraliniai to trunk, krasto to primary, rajoniniai to secondary by an automated script."/>
</changeset>
</osm>
"""
print len(changeset_body)
def main():
#dump = parse(BZ2File("lithuania.osm.2010-02-14.bz2"))
dump = parse(BZ2File("map.osm.bz2"))
st, msg, changeset = http("PUT", "/api/0.6/changeset/create",
changeset_body)
if st != 200:
print st, msg
print changeset
return
print "Opened changeset %s." % changeset
count = 0
for way in dump.xpath("//way[tag/@k='highway']"):
ref = "".join(way.xpath("t...@k='ref']/@v"))
if (ref and
(rajoninis.match(ref) or krasto.match(ref)
or magistralinis.match(ref))):
print "%s..." % ref
way_id = way.get("id")
st, exp, body = http("GET", "/api/0.6/way/" + way_id)
if str(st) != "200":
print "No way", way.get("id")
continue
copy = parse(StringIO(body))
highway = copy.xpath("//t...@k='highway']")[0]
way = copy.find("way")
way.set("changeset", changeset)
if rajoninis.match(ref):
highway.set("v", "secondary")
elif krasto.match(ref):
highway.set("v", "primary")
elif magistralinis.match(ref):
highway.set("v", "trunk")
st, err, body = http("PUT", '/api/0.6/way/' + way_id,
tostring(copy))
if st == 200:
count += 1
else:
print st, err
print body
print http("PUT", "/api/0.6/changeset/%s/close" % changeset)
print "%s ways updated." % count
auth = "alga:iPh2eesh"
server = 'api06.dev.openstreetmap.org'
def http(method, path, body=""):
conn = HTTPConnection(server)
headers = {
'User-Agent': 'LTUpgradeScript',
'Content-Type': 'text/xml; charset=UTF-8',
'Authorization': 'Basic %s' % auth.encode('base64').strip(),
}
conn.request(method, path, body, headers)
response = conn.getresponse()
return response.status, response.reason, response.read()
if __name__ == '__main__':
main()
map.osm.bz2
Description: Binary data
_______________________________________________ Talk-lt mailing list [email protected] http://lists.openstreetmap.org/listinfo/talk-lt
