[Python] R: R: Elenco strade italiane per comune

2012-01-04 Per discussione Salvadori Giordano
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

2012-01-04 Per discussione Salvadori Giordano
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

2012-01-04 Per discussione Salvadori Giordano
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

2012-01-04 Per discussione Giuseppe Amato
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-01-04 Per discussione Simone Federici
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

2012-01-04 Per discussione Alberto Abate
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

2012-01-04 Per discussione Alberto Abate
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