F1 Help! La solución que buscabas

Desarrollo, programación, tips, consejos y soluciones para los usarios de PC

martes, 5 de julio de 2011

Buscar coordenas de una ciudad usando Google

Hoy necesitaba buscar las coordenadas de varias ciudades de Argentina, por lo que hice este scirpt.

Toma como entrada un arivo llamado citys.txt con el formato "codigo postal, nombre ciudad".

Y devuelve un archivo con las coordenadas, y la provincia entre otras cosas.



import urllib
import urllib2
import string
from xml.dom import minidom
import unicodedata 

def remove_accents(str): 
    nkfd_form = unicodedata.normalize('NFKD', unicode(str)) 
    only_ascii = nkfd_form.encode('ASCII', 'ignore') 
    return only_ascii 
        
def get_text(arbol):
 return arbol.firstChild.data

def es_el_que_busco(arbol):
 adds = arbol.getElementsByTagName('type')
 for a in adds:
  if get_text(a) == "administrative_area_level_1":
   return 1
 return 0


def provincia(arbol):
 adds = arbol.getElementsByTagName('address_component')
 for a  in adds:
  if es_el_que_busco(a) == 1:
   return get_text(a.getElementsByTagName('long_name')[0])
 return ""

def get_coordenadas(arbol):
 location = arbol.getElementsByTagName('location')[0]
 lat =  get_text(location.getElementsByTagName('lat')[0])
 lng =  get_text(location.getElementsByTagName('lng')[0])
 return (lat,lng)

f = open("citys.txt", "r")
ciudades = []
while True:
      linea = f.readline()
      if not linea: break
      ciudades.append( (linea[:4],linea[6:len(linea) - 2 ] ) )

f = open('coordenadas.txt', 'a')
o = urllib2.build_opener()
for ciudad in ciudades:
 ss = 'http://maps.googleapis.com/maps/api/geocode/xml?address=' + ciudad[1].replace(" ","%20")  + '%20ARGENTINA&sensor=false'
 res = o.open(ss) 
 pagina = res.read()
 arbol = minidom.parseString(pagina)
 if arbol.getElementsByTagName("status")[0].firstChild.data == "OK":
  c = get_coordenadas(arbol)
  p =  provincia(arbol)
  f.write(ciudad[0] + "," + ciudad[1] + "," + remove_accents(p) + "," + str(c[0])+ "," + str(c[1]) + "\n" )
  print (ciudad[0] + "," + ciudad[1] + "," + remove_accents(p) + "," + str(c[0])+ "," + str(c[1])  )
 else:
  print (ciudad[1] + " No encontrado") 
f.close()

La idea del codigo es que aprendan como se maneja el minidom Javascript de python y su aplicacion en google. Supongo que no van a tener problema para modificar la entrada o la salida del programa.

No hay comentarios: