ES:Mkgmap/Ayuda/Cómo crear un mapa

From OpenStreetMap Wiki
Jump to navigation Jump to search

broom

Help (89606) - The Noun Project.svg

Introducción

Si quieres cargar datos de OSM en un dispositivo GPS Garmin, puedes descargar mapas precompilados o compilarlos tú mismo. Esta página describe esta última opción. Los mapas producidos soportan el enrutamiento (para vehículos) y la búsqueda de direcciones.

Prerrequisitos

Necesitarás descargar las siguientes herramientas o software:

Instala la Máquina virtual Java 1.8. Tanto mkgmap como splitter dependen de él.

information sign

Java normalmente está disponible y puede que ya esté instalado en tu equipo.

Guía paso a paso

Descarga los datos de OSM (.osm, .osm.pbf or .osm.gz) para una determinada región. Los sitios espejo ofrecen extractos que aparecen en lista aquí. Geofabrik es un buen lugar donde empezar.

Usa splitter para dividir los datos del mapa en bruto en trozos más pequeños, llamados teselas. Esto es necesario porque la mayoría de los extractos de regiones descargados son demasiado grandes para ser procesados por mkgmap. Por ejemplo:

$ java -jar splitter.jar us-northeast-latest.osm.pbf

information sign

Explicación detallada del comando: java -jar splitter.jar ejecuta el código java del archivo splitter.jar (por favor, asegúrate de que este archivo está en la carpeta actual o puede ser encontrado por tu sistema) y us-northeast-latest.osm. pbf es el archivo que contiene los datos osm que deseas dividir en archivos de regiones más pequeños para procesarlos después con el programa mkgmap (otros formatos de archivo aceptables: .osm, .o5m)

Las teselas resultantes se denominan 6324xxxx.osm.pbf, donde xxxx es 0001, 0002, 0003...

Estas teselas pueden compilarse en un mapa tal cual, pero el mapa resultante carecería de datos de dirección (por ejemplo, ciudad o código postal). Los datos de direcciones provienen de teselas de límites preprocesados, y puede descargarlos de mkgmap.org o crearlos tú mismo como se describe en Mkgmap/Ayuda/Opciones/Usar límites preprocesados para índice de direcciones. Coloca los archivos resultantes en un subdirectorio llamado bounds.

Por último, puedes usar mkgmap para compilar las teselas y la información de delimitación en algo comprensible para un GPS Garmin.

$ java -jar mkgmap.jar \
    --route \
    --add-pois-to-areas \
    --bounds=bounds \
    --index \
    --gmapsupp \
    6324*.osm.pbf

information sign

Explicación detallada del comando: esta vez ejecutamos el código java del archivo mkgmap.jar, pasando las siguientes opciones --route, --add-pois-to-area,--bounds=bounds, --index, y --gmapsupp en cada uno de los archivos con formato .osm.pbf en el directorio actual cuyos nombres empiezan por 6324.... \ se usa para dividir el comando en varias líneas, ya que, de lo contrario, debería introducirse en la consola en una sola línea.

Esto crea varios archivos, incluyendo el codiciado archivo gmapsupp.img. Copia este archivo en la tarjeta SD usada por el GPS. Los detalles están listados aquí, pero aquí hay un rápido repaso:

  • La tarjeta SD debe estar formateada como FAT32.
  • Debe haber una carpeta llamada «Garmin en la raíz de la tarjeta SD.
  • El gmapsupp.img va en la carpeta «Garmin».

information sign

Si obtienes un error «OutOfMemoryError: java heap space», tendrás que aumentar la memoria disponible usando el parámetro -Xmx (por ejemplo, java -Xmx2000M -jar mkgmap.jar ...).

Ajusta tu mapa

You can use several options and the style files of mkgmap to tweak your map to your requirements. Read the following for details:

Creación detallada de mapas personalizados e integración en BaseCamp

Este es un tutorial más detallado para la creación de la red de carreteras francesa accesible a vehículos (con el fin de actualizar un dispositivo GPS nüvi 250) y la creación de un instalador para permitir el uso del mapa en el programa Garmin Basecamp en Windows.

Prerrequisitos

Hemos probado lo siguiente en Ubuntu 14.04 y el instalador en Windows 10.

Software/Herramientas

  • Java Runtime Environment from http://www.java.com
  • mkgmap (r3676)
  • splitter (r437)
  • osmconvert (0.7T) (can be installed via the debian/ubuntu package osmctools using) ~.../map$ sudo apt-get install osmctools
  • makensis (can be installed via the debian/ubuntu package osmctools using) ~.../map$ sudo apt-get install nsis

    information sign

    Command detailed explanation: sudo ask for superuser rights (admin) and runs apt to install osmctools or nsis package from repository.
    We work from a folder named "map" from which we can run "splitter.jar" and "mkgmap.jar". This can be made by downloading the "mkgmap-r3676.zip" and "splitter-r437.zip" files from http://www.mkgmap.org.uk/download/ in our current folder "map", extract the archives content there, then create a symbolic link to the .jar files in our current folder ~.../map$ ln -s ./mkgmap-r3676/mkgmap.jar mkgmap.jar.

Datos de OpenStreetMap

Descargamos los datos de OSM actualizados del servidor geofabrik (datos de Francia) : france-latest.osm.pbf. El formato .pbf usado aquí es un formato binario mucho más comprimido que el formato original xml de lectura humana .osm. Para nuestro proyecto nos gustaría usar una opción intermedia empleando .o5m, que es más rápido de escribir que .pbf usando la herramienta osmconvert: osmconvert france-latest.osm.pbf france-latest.o5m.

Datos preprocesados de OpenStreetMap

Le pediremos a Mkgmaps que codifique las direcciones postales de los lugares para poder encontrarlos en nuestro GPS. También le pediremos que defina manchas azules para los mares. Estos elementos no se definen directamente como objetos OpenStreetMap, sino indicando sus límites. Para definir qué elementos están dentro de los límites o no, hay que procesar primero los primeros. Este proceso genera archivos útiles para generar direcciones y zonas marítimas. Los límites preprocesados actualizados de mares y limites administrativo pueden descargarse de la página web de mkgmap (archivos Sea.zip y bounds.zip).

Datos de lugares de referencia:

La lista de ciudades pobladas con más de 1500 personas es mantenida por el proyecto Geonames. Descarga cities15000.zip para etiquetar automáticamente las teselas de mapa separadas de splitter.

Guía paso a paso

First we will use splitter to split our large france-latest.o5m file in smaller processable files in the same format:

~.../map$java -jar splitter.jar france-latest.o5m --output=o5m --output-dir=francesplittertempfile --max-areas=4096 --max-nodes=3000000 --wanted-admin-level=8 --geonames-file=cities15000.txt > francesplitter.log

information sign

Command detailed explanation: java -jar splitter.jar runs the java code from the splitter.jar file on france-latest.o5m. Options: --output=o5m ask for .o5m output files, --output-dir=francesplittertempfile put the output files in ./francesplittertempfile folder, --precomp-sea=sea.zip gives splitter the sea border file, --geonames-file=cities15000.zip ask him to use the name of the largest city in cities15000.zip also found in the newly generated subarea file to autogenerate its description field in template.args (latter used by mkgmap) that will identify the tile in the gps device/basecamp, --max-areas=4096 and --max-nodes=3000000 respectively gives the maximum size and number of nodes allowed in the output files. --wanted-admin-level=8 ask splitter to maintain object relation complete up to the level of a city. > francesplitterlog redirect the shell output to the text file splitterlog

Please note that I adapted the maximum size and number of nodes allowed in the output files in order to limit the number of tiles in the final Garmin .img map, on the other hand it augment the risk of running out of memory in the next steps... I asked to keep element linked together up to the level of the cities because it seemed that obtained better address search results this way.

This step produces a new folder ./francesplittertempfile and a log file francesplitterlog in our current directory. The new folder contains among others a mkgmap option file template.arg with name and description field of all the 6324xxxx.o5m files of the subregions generated by the operation.

Second, we will generate our custom mkgmap style rule files that contains all the rules about how to process the osm objects/include them in the .img files. We will start modifying the default style file that can be found in ~/map$./mkgmap-r3676/examples/styles/ and make a copy the default folder in our map folder to edit the rules with name road_only.

We let the options file as it is. New style description can be updated in the info file. In relations, lines, and points we comment all the line corresponding to elements that we do not want to show in the map (OSM object that are not covered by a rule are disregarded by default). Hence in the points file, we comment all the lines but those that correspond to car necessities, routing and addressing:

  • place=...
  • amenity=fuel ...
  • amenity=parking ...
  • highway=...
  • <finalize> name=* { name '${name}' } include 'inc/address';

an include line is used for readability and refer to another file that is incorporated as it is. Thoses files such as road_only/inc/address must be checked also...

Third, we will use mkgmap program to generate the garmin .img maps note that options order matters a lot:

~.../map$java -jar mkgmap.jar --max-jobs --gmapsupp --tdbfile --nsis --output-dir=OSMFRANCE_light --mapname=OSM_FRANCE_light --country-name="FRANCE" --family-id=6324 --family-name="OSM_light france 2016" --series-name="OSM france map" --area-name="France" --country-abbr="FRA" --style-file=./road_only --precomp-sea=sea.zip --generate-sea --route --drive-on=detect,right --process-destination --process-exits --index --bounds=bounds.zip --location-autofill=is_in,nearest --x-split-name-index --housenumbers --remove-ovm-work-files --verbose -c ./francesplittertempfile/template.args

information sign

Explicación detallada de las opciones del comando: --max-jobs permite procesar varios archivos a la vez si tienes muchos procesadores (ganancia de tiempo) --gmapsupp genera un archivo gmapsupp. img listo para copiar en la carpeta sdcard del GPS /garmin, --tdbfile un code de índice de direcciones para el instalador de basecamp, --nsis el script de nsis para generar el instalador de Windows, --output-dir=OSMFRANCE_light nombre del subdirectorio para la salida de archivos generados, --mapname=OSM_FRANCE_light --country-name="FRANCE" --family-id=6324 ten en cuenta que Basecamp sólo mostrará uno de los dos mapas creados con el mismo familly-ID, --family-name="OSM_light france 2016" el nombre que Basecamp utilizará para designar el mapa --series-name="OSM france map" --area-name="France" --country-abbr="FRA" la abreviatura parece ser una entrada usada para la generación del índice de direcciones desde el archivo de límites preprocesado, --style-file=. /road_only el directorio donde establecemos las reglas para procesar e incluir los datos de OSM en el mapa, --precomp-sea=sea.zip --generate-sea para generar la zona azul para el mar utilizando el archivo preprocesado descargado, --route--drive-on=detect,right --process-destination --process-exits habilitar el enrutamiento con la detección del lado de la carretera utilizado y la indicación de las direcciones de salida de la autopista, --index --bounds=bounds. zip --location-autofill=is_in,nearest --x-split-name-index --housenumbers habilitar la búsqueda de direcciones generando un índice con los números de las calles e intentando adivinar las direcciones de los edificios sin etiquetar, --remove-ovm-work-files eliminar los archivos temporales de trabajo después de la ejecución, -c ./francesplittertempfile/template.args dar el emplazamiento del archivo de opciones generado por el splitter

En cuarto lugar crearemos el instalador de Windows para el uso del mapa de Basecamp ejecutando el script osmmap.nsi generado automáticamente por mkgmap para makensis:

~.../map$ makensis ./OSMFRANCE_light/osmmap.nsi

Ten en cuenta que los archivos .img se comprimen en el instalador. Por defecto, mkgmap genera un script de construcción que pide una compresión lzma que tiene excelentes propiedades de nivel de compresión y tiempo de extracción, pero puede tardar mucho tiempo en completarse. Puede que te interese crear un archivo más grande en menos tiempo usando el algoritmo de compresión más simple zlib cambiando la línea de valor de la opción correspondiente en el archivo de secuencia de comandos .nsi antes de crear el instalador (usando sed -i 's_SetCompressor /SOLID lzma_SetCompressor /SOLID zlib_g' ./OSMFRANCE_light/osmmap.nsi)

information sign

Command detailed explanation: sed -i run sed for an infile modification of ./OSMFRANCE_light/osmmap.nsi, as 's_chaine1_chaine2_g' substitute all occurrences of chaine1 by chaine2

(Once the installer is build, all 6324xxxx.img files can be deleted using for i in "./$DIR/6324*.img"; do rm $i; done)