Trabajos

PyMappu

PyMappu

PyMappu es una herramienta que genera ficheros KML a partir de instrucciones sencillas. KML es un lenguaje XML usado en Google Earth y Google Maps, que describe la posición geográfica (longitud y latitud) de puntos (placemarks), caminos (paths), polígonos, modelos en 3D y otros elementos.

Los programas de Google tienen interfaces gráficas para posicionar esos objetos, pero no disponen de ninguna función que haga lo mismo a partir de coordenadas numéricas. Precisamente es lo que esta utilidad intenta lograr.

Dependencias: Python 2.7 (debido a que utilizo el paquete argparse) y GeoPy.

El programa también depende de yapps, versión dos cero cuatro (concretamente del runtime, yappsrt.py), pero viene incluído en el programa (pymappu.yapps), porque no se puede instalar automáticamente a través de Easy Install.

Un ejemplo práctico

Supongamos que nos interesa un mapa turístico de una página web. La mayoría están elaborados con Google Maps API, pero no se nos facilita ningún mecanismo para exportarlos a nuestra cuenta y verlos en google-maps o Google Earth. Sin embargo, sí que podemos examinar el código fuente y buscar las coordenadas:

Figura 1: Una página con un mapa Google Maps API incrustado, y el código que lo genera a la derecha.

En el mapa aparecen globos indicando los lugares principales en rojo, y los secundarios en azul. En este mismo color, un camino que los recorre. Pues bien, copiamos las coordenadas y escribimos unas instrucciones tal que así:

putAttraction (
    (
        "Ginkakuji"
        "45 minutes - Ginkaku-ji (銀閣寺, Silver Pavilion) is a Zen temple..."
        (35.027167445406256,135.7973027229309)
    )
    ("Honenin" (35.02399577177208,135.79739391803741))
    (
        "Along the Philosopher's Path"
        "90 minutes - The Philosopher's Path (哲学の道, Tetsugaku no michi) starts just outside the approach to Ginkakuji..."
        (35.022941448576944,135.79561293125153)
    )
 
)
 
putAddition (
    (
        "Gion"
        "Gion (祇園). Check out the historical Gion entertainment district..."
        (35.00270020093859,135.77486336231232)
    )
    (
        "Sanjusangendo"
        "Sanjusangendo (三十三間堂, Sanjūsangendō) is an interesting temple that houses 1001 statues of the Buddhist goddess..."
        (34.987868671665495,135.77174127101898)
    )
)
 
drawPath (
    "Eastern Kyoto Full Day"
    "The following is a suggested full day itinerary for medium paced travelers that leads..."
    (35.0271718382207,135.79727590084076)
    (35.02717623103489,135.79579532146454)
    (35.02722894478686,135.79511940479279)
    (35.027220159163896,135.79498529434204)
)

He omitido muchos lugares para que no interrumpan la lectura de este texto. Los lugares más interesantes se crean mediante la instrucción putAttraction, y los secundarios con putAddition. La última, drawPath, dibuja el camino.

Guardamos lo anterior como input-instructions.txt, y ejecutamos pymappu:

D:\>pymappu-windows -i input-instructions.txt -ienc utf-8 -o mymap lat_lon
--path_ends_placemark_merge
 
Warning: --path_ends_placemark_merge is present but --merge_limit is absent.
Assigning default value of 10.000000 meters.
Expr rule correctly parsed

En entornos Unix utilizaríamos pymappu-unix en lugar de pymappu-windows. Se genera una salida KML (en el ejemplo, el fichero mymap.kml):

<Placemark>
  <name>Ginkakuji</name>
  <description>45 minutes - Ginkaku-ji (銀閣寺, Silver Pavilion) is a Zen temple...</description>
  <styleUrl>#pathStartStyle</styleUrl>
  <Point>
    <coordinates>135.797275901,35.0271718382,0</coordinates>
  </Point>
</Placemark>
<Placemark>
  <name>Honenin</name>
  <styleUrl>#attractionStyle</styleUrl>
  <Point>
    <coordinates>135.797393918,35.0239957718,0</coordinates>
  </Point>
</Placemark>
<Placemark>
  <name>Along the Philosopher's Path</name>
  <description>90 minutes - The Philosopher's Path (哲学の道, Tetsugaku no michi) starts just outside the approach to Ginkakuji...</description>
  <styleUrl>#attractionStyle</styleUrl>
  <Point>
    <coordinates>135.795612931,35.0229414486,0</coordinates>
  </Point>
</Placemark>
   
<Placemark>
  <name>Gion</name>
  <description>Gion (祇園). Check out the historical Gion entertainment district...</description>
  <styleUrl>#additionStyle</styleUrl>
  <Point>
    <coordinates>135.774863362,35.0027002009,0</coordinates>
  </Point>
</Placemark>
<Placemark>
  <name>Sanjusangendo</name>
  <description>Sanjusangendo (三十三間堂, Sanjūsangendō) is an interesting temple that houses 1001 statues of the Buddhist goddess...</description>
  <styleUrl>#additionStyle</styleUrl>
  <Point>
    <coordinates>135.771741271,34.9878686717,0</coordinates>
  </Point>
</Placemark>
   
<Placemark>
  <name>Eastern Kyoto Full Day</name>
  <description>The following is a suggested full day itinerary for medium paced travelers that leads...</description>
  <styleUrl>#pathStyle</styleUrl>
  <LineString>
    <coordinates>
      135.797275901,35.0271718382,0
      135.795795321,35.027176231,0
      135.795119405,35.0272289448,0
      135.794985294,35.0272201592,0
    </coordinates>
  </LineString>
</Placemark>

Importamos este fichero KML desde Google Maps (o Earth), y el resultado es el siguiente:

Figura 2: Resultado después de importar el fichero KML generado por PyMappu. Distinción verde/amarillo para el principio y final del camino. Nombres y descripciones detalladas.

Tenemos el mismo mapa de la página web, importado en nuestra cuenta. Esto es ventajoso:

Descargas:

El fichero anterior incluye además una cuidada documentación elaborada con Sphinx (navegar a PyMappu-0.9.0.zip\PyMappu-0.9.0\docs\build\html\index.html). En ella se detalla la instalación, un ejemplo, el formato de las instrucciones, los argumentos del programa, y la documentación automática. Para mayor comodidad, también puede consultarla en este link.