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

Salvadori Giordano G.Salvadori a syes.eu
Mar 3 Gen 2012 15:45:08 CET


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: python-bounces a lists.python.it [mailto:python-bounces a lists.python.it] 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.0010000

		 

		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.

 

 

 

 

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120103/dd79003b/attachment.html>


Maggiori informazioni sulla lista Python