[Python] R: R: Elenco strade italiane per comune
Ciao Buono il metodo ma la limitazione è effettivamente un "po' bloccante". Potresti però fare le richieste con Ip diversi (metodo con i proxy) in modo che Google non ti blocchi non riconoscendoti come lo stesso utente. Confermo che la soluzione offline con i file in formato osm è estremamente ostico. Non conoscete una fonte che al posto dei dati in formato osm dia i dati in formato .txt oppure .osd .csv formato testo ??? Sarebbe decisamente più comodo. Da quale pkg si installa api che viene richiesto in import dall'esempio con cloudmade??? Grazie in anticipo per l'aiuto. Giordano Da: [email protected] [mailto:[email protected]] Per conto di Alberto Abate Inviato: martedì 3 gennaio 2012 15.32 A: Discussioni generali sul linguaggio Python Oggetto: Re: [Python] R: Elenco strade italiane per comune #!/usr/bin/python from pygeocoder import Geocoder, GeocoderResult from time import sleep def frange(start,end,step): return map(lambda x: x*step, range(int(start*1./step),int(end*1./step))) results = Geocoder.geocode('Galatina') geometry = results.raw[0]['geometry'] max_lat = geometry['bounds']['northeast']['lat'] min_lat = geometry['bounds']['southwest']['lat'] max_lon = geometry['bounds']['northeast']['lng'] min_lon = geometry['bounds']['southwest']['lng'] print min_lat, max_lat strade = [] i = 0 step = 0.001 for lat in frange(min_lat, max_lat, step): for lon in frange(min_lon, max_lon, step): indirizzo = Geocoder.latlng_to_address(lat, lon) # sleep(5) if indirizzo not in strade: strade.append(str(lat)+'_'+str(lon)+'_'+indirizzo) i += 1 print 'Count: ',i strade.sort() for s in strade: print s Sto sperimentando una soluzione da pazzi: infatti funziona parzialmente ;-)) Come da codice sopra stavo usando pygeocoder per fare una scansione dei 'bounds' cioè del rettangolo sulle google maps con longitudine e latitudine. Usando poi la funzione Geocoder.latlng_to_address(lat, lon) cioè una forma di reverse_geocode, ottengo il nome della strada che salvo nella lista strade. Il problema è che le api di google consentono di effettuare solo 2500 query al giorno, quindi si ottiene un bel OVER_QUERY_LIMIT Avete idea su come bypassare il limite? Ho letto che forse con la funzione sleep potrei rallentare le query, ma per oggi non posso provarlo... Ho scaricato qualche file in formato osm (openstreetmap), ma non mi sembrano molto comodi e affidabili per i nomi delle strade; la soluzione offline non mi piace molto. ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
[Python] R: R: Elenco strade italiane per comune
Ciao Magari fossero in provincia, comune vie in questo modo qualsiasi sia il formato del file. -Messaggio originale- Da: [email protected] [mailto:[email protected]] Per conto di Pietro Inviato: martedì 3 gennaio 2012 16.44 A: Discussioni generali sul linguaggio Python Oggetto: Re: [Python] R: Elenco strade italiane per comune > Ho scaricato qualche file in formato osm (openstreetmap), ma non mi sembrano > molto comodi e affidabili per i nomi delle strade; la soluzione offline non > mi piace molto. In che senso non sono affidabili? in che formato lo vorresti? un json con: provincia, comune, vie? magari parlandone con la comunity di osm lo possiamo fare... grazie per i feedback... pietro ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
[Python] R: R: Elenco strade italiane per comune
Ciao Buono il metodo ma la limitazione è effettivamente un "po' bloccante". Potresti però fare le richieste con Ip diversi (metodo con i proxy) in modo che Google non ti blocchi non riconoscendoti come lo stesso utente. Confermo che la soluzione offline con i file in formato osm è estremamente ostico. Non conoscete una fonte che al posto dei dati in formato osm dia i dati in formato .txt oppure .osd .csv formato testo ??? Sarebbe decisamente più comodo. Da quale pkg si installa api che viene richiesto in import dall'esempio con cloudmade??? Grazie in anticipo per l'aiuto. Giordano -Messaggio originale- Da: [email protected] [mailto:[email protected]] Per conto di Pietro Inviato: martedì 3 gennaio 2012 16.44 A: Discussioni generali sul linguaggio Python Oggetto: Re: [Python] R: Elenco strade italiane per comune > Ho scaricato qualche file in formato osm (openstreetmap), ma non mi sembrano > molto comodi e affidabili per i nomi delle strade; la soluzione offline non > mi piace molto. In che senso non sono affidabili? in che formato lo vorresti? un json con: provincia, comune, vie? magari parlandone con la comunity di osm lo possiamo fare... grazie per i feedback... pietro ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
Re: [Python] R: R: Elenco strade italiane per comune
Il giorno 03 gennaio 2012 15:45, Salvadori Giordano ha scritto: > ** > > Ciao > > ** ** > > Buono il metodo ma la limitazione è effettivamente un “po’ bloccante”. *** > * > > Potresti però fare le richieste con Ip diversi (metodo con i proxy) in > modo che Google non ti blocchi non riconoscendoti come lo stesso utente.** > ** > > ** ** > Non credo sia fattibile, perchè con le api di google, se non ricordo male, ogni volta che fai una query ti devi registrare con user e pw, quindi anche cambiando ip le cose non cambiano -- Giuseppe Amato e-mail: [email protected] ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
Re: [Python] Elenco strade italiane per comune
2012/1/4 Giovanni Porcari > E dopo 45 giorni di prova il servizio è a pagamento. e sai mica quanto costa? ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
Re: [Python] R: R: Elenco strade italiane per comune
Riprendo il discorso inserendo l'evoluzione delle mie ricerche...
import simplejson
>
> import requests
>
>
>> address = 'Galatina'
>
> latlng = 40.1775244,18.1696415
>
> coda = '&sensor=false'
>
> params_address = 'address=' + address + coda
>
> params_latlng = 'latlng=' + str(latlng) + coda
>
> print params_address
>
>
>> #r = requests.get('http://www.google.com', proxies={"http":"
>> http://myproxy:3129"})
>
>
>
> r = requests.get('
>> http://maps.google.com/maps/api/geocode/json?'+params_address)
>
> if r.status_code == requests.codes.ok:
>
> ris = simplejson.loads(r.content)
>
>
>
> #print ris
>
> address_components = ris['results'][0]['address_components']
>
>
>
> for address in address_components:
>
> #print address['long_name'], address['short_name'], address['types']
>
>
>
> if address['types'] == [u'locality', u'political']:
>
> comune = address['long_name']
>
>
>> if address['types'] == [u'administrative_area_level_2',
>> u'political']:
>
> provincia = address['long_name']
>
> cod_prov = address['short_name']
>
>
>> if address['types'] == [u'administrative_area_level_1',
>> u'political']:
>
> regione = address['long_name']
>
>
>> if address['types'] == [u'country', u'political']:
>
> stato = address['long_name']
>
> cod_stato = address['short_name']
>
>
>> if address['types'] == [u'postal_code']:
>
> cap = address['long_name']
>
>
>> print comune, provincia, cod_prov, cap
>
> print regione, stato, cod_stato
>
>
>>
>> max_lat = ris['results'][0]['geometry']['bounds']['northeast']['lat']
>
> min_lat = ris['results'][0]['geometry']['bounds']['southwest']['lat']
>
>
>> max_lng = ris['results'][0]['geometry']['bounds']['northeast']['lng']
>
> min_lng = ris['results'][0]['geometry']['bounds']['southwest']['lng']
>
>
>> print 'min_lat',min_lat
>
> print 'max_lat',max_lat
>
> print 'min_lng',min_lng
>
> print 'max_lng',max_lng
>
>
>>
>> strade = []
>
> i = 0
>
> step = 0.001
>
>
>> """
>
> for lat in frange(min_lat, max_lat, step):
>
> for lon in frange(min_lon, max_lon, step):
>
> indirizzo = Geocoder.latlng_to_address(lat, lon)
>
> # sleep(5)
>
> if indirizzo not in strade:
>
> strade.append(str(lat)+'_'+str(lon)+'_'+indirizzo)
>
> i += 1
>
>
>> print 'Count: ',i
>
>
>> strade.sort()
>
> for s in strade:
>
> print s
>
>
>> """
>
>
>
Commento qualcosa:
@ Pietro
> In che senso non sono affidabili? in che formato lo vorresti? un json
> con: provincia, comune, vie?
> magari parlandone con la comunity di osm lo possiamo fare...
sono inaffidabili nel senso che i nomi delle strade sono davvero pochi e
ogni file di regione
pesa 130 mb, un po' troppi per analizzarli in modo semplice e controllare
aggiornamenti...
Non so, mi sembra davvero complesso, con i file osm.
@ Salvadori Giordano
> Buono il metodo ma la limitazione è effettivamente un “po’ bloccante”.
> Potresti però fare le richieste con Ip diversi (metodo con i proxy) in
modo che Google non > ti blocchi non riconoscendoti come lo stesso utente.**
**
> Da quale pkg si installa api che viene richiesto in import dall’esempio
con cloudmade???
In effetti sto pensando proprio di usare una lista di proxy per bypassare
il limite delle
2500/day richieste.
Ho trovato questo modulo python: si chiama requests e semplifica di molto
una richiesta nel mio caso json dalle api di google.
http://docs.python-requests.org/en/latest/
Come vedete nel codice ho messo una riga commentata che preannuncia la
possibilità di gestire le chiamate con proxy...
Devo solo trovare una lista di proxy anonimi da provare.
Usando il modulo simplejson riesco a trasformare la richiesta in un
dizionario che leggo
facilmente.
Con "requests" e "simplejson" evito di usare il modulo "pygeocoder" che mi
sta simpatico
per facilità d'uso, ma in effetti non fa altro che incapsulare la chiamata
che faccio
facilmente con requests in json (ma spulciando la documentazione vedo che
va bene anche per html)
Ho usato cloudmade, ma occorre registrarsi al sito per ottenere una key da
inserire nel codice. Come vedi dal codice sopra, "api" è importato da
"cloudmade" stesso;
se installi cloudmade lo trovi dentro. Io uso easy_install è molto comodo
per installare
moduli in python
per effettuare delle query sulle api di google non occorre autenticarsi, ma
si può
fare liberamente restando sotto le 2500 richieste al giorno.
Per quanto riguarda rest di viamichelin mi pare che si escluda da solo per
il fatto
che sia a pagamento...
Sono un po' in dubbio sul metodo di scansione dei bounds, troppo
inefficiente...
Ok, mi sa che ho parlato pure troppo,
torno a studiare...
Qualunque consiglio è ben accetto
___
Python mailing list
[email protected]
http://lists.python.it/mailman/listinfo/python
Re: [Python] R: R: Elenco strade italiane per comune
Scusate, dimenticavo... Sto studiando qui http://code.google.com/intl/it-IT/apis/maps/documentation/geocoding/ http://code.google.com/intl/it-IT/apis/maps/documentation/javascript/services.html#Geocoding saluti ___ Python mailing list [email protected] http://lists.python.it/mailman/listinfo/python
