Actualmente uso un plugin llamado WP Geo, éste permite colocar en un mapa los artículos de WordPress. Es sencillo, escribes el articulo y abajo de todo tienes un mapa, marcas un lugar y voilà, el articulo ya está georeferenciado. De esta forma puedo poner en una web un mapa de una zona y ver todos los artículos de la zona. Por ejemplo, si quiero mirar que hay en alquintopino sobre Cuenca, me voy al mapa de Cuenca y puedo saber hay que en los alrededores (no busquéis, no hay nada  aún sobre Cuenca).

Pero si quiero hacer eso mismo en el móvil y además crear una ruta hasta uno de esos puntos, o de varios, entonces la cosa se complica. Básicamente no se puede. La solución más ágil (que he encontrado) es crear un Mapa de Google, y abrirlo desde la aplicación del móvil, de esta manera se crea una capa con los puntos sobre la información que proporciona Google Maps. Pero claro, una cosa es crear una capa con cuatro puntos y otra muy diferente hacerlo con cientos de elementos.

La solución es usar un archivo KML como intermediario.  Es decir usar un script que exporte automáticamente los artículos a un archivo KML y después importamos el archivo KML en MyMaps.

Para ello necesitamos crear dos archivos en nuestro site:

  • site/wp-kml.php
  • site/wp-includes/feed-kml.php

wp-kml.php

<?php
if (empty($wp)) { 
   require_once('./wp-config.php'); 
   wp('feed=rss2');
   }
// $wp_query->post_count = 500;
query_posts('showposts=500');
require (ABSPATH . WPINC . '/feed-kml.php');
?>

feed-kml.php

<?php
pheader('Content-Type: text/xml; charset='.get_option('blog_charset'), true);
?>
<?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
 ?>
<kml xmlns="http://earth.google.com/kml/2.0"><Document> <name>
<?php bloginfo_rss('name');
 ?>
</name>
<?php
$args = array( 'numberposts' => '-1', 'post_status' => 'publish', 'orderby'=> 'title', 'order' => 'ASC', 'post_type' => 'post');
$recent_posts = wp_get_recent_posts($args);
foreach($recent_posts as $recent) 
 { 
 if (get_wpgeo_longitude( $recent["ID"])) 
  { 
  echo "<Placemark id='place".$recent["ID"]."'>\n"; 
  echo "<name>".$recent["post_title"]."</name>\n"; 
  echo "<description>".get_permalink($recent["ID"])."</description>\n";
  echo "<Point>\n"; 
  echo "<coordinates>\n"; 
  echo get_wpgeo_longitude( $recent["ID"]).",".get_wpgeo_latitude( $recent["ID"] ).",0\n"; 
  echo "</coordinates>\n";
  echo "</Point>\n"; 
  echo "</Placemark>\n"; 
  } 
 }
wp_reset_query();
?>
</Document>
</kml>

Una vez subido a nuestro site, ya solo nos queda desde un navegador ir a site/wp-kml.php, hacer un save as como *.kml e importarlo en un MyMaps vacio.