[OSM-FVG] [Civici FVG] Prosecuzione lavori
Damjan Gerl
damjan a damjan.net
Mar 4 Nov 2014 23:57:40 UTC
Buona sera a tutti!
Scusate la mia assenza prolungata, ma avevo altri impegni e quasi niente
tempo a disposizione per scrivere... comunque ho fatto alcune prove e
proseguito con la ricerca della procedura e gli script di conversione.
Di seguito le mie "scoperte":
Scoprendo e riuscendo a fare il cut dei comuni sia in ogr2ogr che
ogr2osm ho deciso che meglio farlo direttamente in ogr2osm, cosi basta
fare una volta la conversione del file shp originale dei civici così:
ogr2ogr -s_srs EPSG:32633 -t_srs EPSG:4326 -lco ENCODING=UTF-8
-explodecollections t:\CIVICI_RAFVG_singlepartWGS84utf8.shp
t:\CIVICI_RAFVG.shp CIVICI_RAFVG
Questo comando converte da UTM33 a WGS84 e fa la conversione da
multipart a singlepart (-explodecollections)
Così abbiamo un shp (CIVICI_RAFVG_singlepartWGS84utf8.shp) sul quale
possiamo lavorare direttamente con ogr2osm
Procediamo con ogr2osm, fatto il translation file per il comune di
Duino-Aurisina (vedi allegato) e lanciato:
python t:\ogr2osm\ogr2osm.py t:\CIVICI_RAFVG_singlepartWGS84utf8.shp -t
t:\translation_ts_duino-aurisina.py -o t:\duino-aurisina.osm
Ottengo un file osm pronto per l'importazione e solo con i dati del
comune prescelto. Ovviamente tutto sta nel file translation che deve
essere ben fatto. Però una volta impostato il translation, lanciando il
comando descritto prima in pochi secondi o qualcosa in più si ha il file
osm pronto da aprire in josm. Io ho fatto i translation per i comuni
della provincia di Trieste:
Duino-Aurisina
Sgonico
Monrupino
San Dorligo della Valle
Questi comuni non hanno vie ma solo frazioni, perciò è abbastanza
facile. Io nel translation cerco i nomi delle frazioni usati in SHP e li
sostituisco con i nomi giusti (già in osm).
Poi ho incominciato anche il comune di Muggia, con frazioni e vie...
Cercherò di postare i file translation (e forse anche i file osm pronti)
nel wiki, per poter essere verificati.
Bello sarebbe provare ad impostare tutte le regole per i nomi discusse
fino ad ora in un file translation (quindi in python) da poter usare per
tutti i comuni (parte del file translation "translateName", da me non
ancora usato)
Ciao
Damjan G.
08.10.2014 - 21:37 - Cascafico Giovanni:
>
> > Io non me ne intendo di questi sistemi, nel mio caso ho già
> verificato e corretto tutti i nomi delle vie del mio comune, ma tutto
> in manuale
>
> Dove hai messo il .osm? Sarebbe il caso di metterci un collegamento
> nella pagina wiki o almeno scrivere che é già pronto
>
> .
> > Non ho fatto uso dei vari ogr...
> > Almeno che qualcuno non mi spieghi passo-passo come fare, e penso
> che questo sarebbe utile anche ad altri. Magari ci fosse una persona
> per comune che lavora su osm e fosse in lista. Questo a mio avviso
> dovrebbe essere il primo punto per noi FVG.
> >
>
> Credo che Damjan Gerl stia combinando qualcosa con gli strumenti
> citati. Anch'io pubblicherò qualcosa sul wiki appena trovo una
> procedura affidabile.
>
> Quali sono i problemi che hai riscontrato editando a mano? Erano
> presenti già molti nodi?
>
-------------- parte successiva --------------
'''
CIVICI_RAFVG
I campi nel shapefile:
Field Definition Reason
COD_ISTAT
NOME_COMUN
ID_STRADA
SPECIE
DENOMINAZI
NUM_CIV
BARRATO
INTERNO
DATA_AGG
DATA_INS
X
Y
ID1
'''
''' filterFeature START - lascia passare solo NOME_COMUN = xxx '''
def filterFeature(ogrfeature, fieldNames, reproject):
if not ogrfeature: return
index = ogrfeature.GetFieldIndex('NOME_COMUN')
if index >= 0 and ogrfeature.GetField(index) in ('DUINO-AURISINA'):
return ogrfeature
return None
''' filterFeature END '''
def translateName(rawname):
'''
A general purpose name expander.
'''
''' suffixlookup = {
'Ave':'Avenue',
'Rd':'Road',
'St':'Street',
'Pl':'Place',
'Cres':'Crescent',
'Blvd':'Boulevard',
'Dr':'Drive',
'Lane':'Lane',
'Crt':'Court',
'Gr':'Grove',
'Cl':'Close',
'Rwy':'Railway',
'Div':'Diversion',
'Hwy':'Highway',
'Hwy':'Highway',
'Conn': 'Connector',
'E':'East',
'S':'South',
'N':'North',
'W':'West'}
newName = ''
for partName in rawname.split():
newName = newName + ' ' + suffixlookup.get(partName,partName)
return newName.strip()
'''
''' filterTags START - imposta tutti i tag '''
def filterTags(attrs):
if not attrs:
return
tags = {}
if attrs['NOME_COMUN'].strip() == 'DUINO-AURISINA':
# tags['source'] = 'CIVICI_RAFVG'
tags['addr:country'] = 'IT'
tags['addr:city'] = u'Duino-Aurisina / Devin - Nabrežina'
tags['addr:postcode'] = '34011'
if attrs['SPECIE'].strip() == 'FRAZIONE':
if attrs['DENOMINAZI'].strip() == 'AURISINA':
tags['addr:place'] = u'Aurisina / Nabrežina'
elif attrs['DENOMINAZI'].strip() == 'AURISINA CAVE':
tags['addr:place'] = u'Aurisina Cave / Nabrežina Kamnolomi'
elif attrs['DENOMINAZI'].strip() == 'AURISINA S.CROCE':
tags['addr:place'] = u'Aurisina Santa Croce / Nabrežina Križ'
elif attrs['DENOMINAZI'].strip() == 'AURISINA STAZIONE':
tags['addr:place'] = u'Aurisina Stazione / Nabrežina Postaja'
elif attrs['DENOMINAZI'].strip() == 'CEROGLIE':
tags['addr:place'] = u'Ceroglie / Cerovlje'
elif attrs['DENOMINAZI'].strip() == 'DUINO':
tags['addr:place'] = u'Duino / Devin'
elif attrs['DENOMINAZI'].strip() == 'MALCHINA':
tags['addr:place'] = u'Malchina / Mavhinje'
elif attrs['DENOMINAZI'].strip() == 'MEDEAZZA':
tags['addr:place'] = u'Medeazza / Medjevas'
elif attrs['DENOMINAZI'].strip() == 'PRECENICO':
tags['addr:place'] = u'Precenico / Prečnik'
elif attrs['DENOMINAZI'].strip() == 'PREPOTTO':
tags['addr:place'] = u'Prepotto / Praprot'
elif attrs['DENOMINAZI'].strip() == 'S.GIOVANNI DI DUINO':
tags['addr:place'] = u'San Giovanni di Duino / Štivan'
elif attrs['DENOMINAZI'].strip() == 'S.PELAGIO':
tags['addr:place'] = u'San Pelagio / Šempolaj'
elif attrs['DENOMINAZI'].strip() == 'SISTIANA':
tags['addr:place'] = u'Sistiana / Sesljan'
elif attrs['DENOMINAZI'].strip() == 'SLIVIA':
tags['addr:place'] = u'Slivia / Slivno'
elif attrs['DENOMINAZI'].strip() == 'TERNOVA PICCOLA':
tags['addr:place'] = u'Ternova / Trnovca'
elif attrs['DENOMINAZI'].strip() == 'VILLAGGIO DEL PESCATORE':
tags['addr:place'] = u'Villaggio del Pescatore / Ribiško naselje'
elif attrs['DENOMINAZI'].strip() == 'VISOGLIANO':
tags['addr:place'] = u'Visogliano / Vižovlje'
if attrs['BARRATO'].strip() != '' and attrs['NUM_CIV'].strip():
tags['addr:housenumber'] = attrs['NUM_CIV'].strip() + '/' + attrs['BARRATO'].strip()
elif attrs['NUM_CIV'].strip():
tags['addr:housenumber'] = attrs['NUM_CIV'].strip()
if attrs['ID1'].strip():
tags['ref:ID1'] = attrs['ID1'].strip()
return tags
''' filterTags END '''
Maggiori informazioni sulla lista
Talk-it-fvg