[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