ES:Mkgmap/Ayuda/Cómo crear un mapa
Si comprendes el artículo original en inglés, por favor, ayuda a completar esta traducción al español. Lee las instrucciones sobre cómo traducir este wiki.
Parece que nadie está trabajando en la traducción en este momento. Anímate y colabora en la tarea de traducción.
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:
- Máquina virtual java 1.8 desde www.java.com
- mkgmap
- splitter
Instala la Máquina virtual Java 1.8. Tanto mkgmap como splitter dependen de él.
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
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
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».
-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:
- mkgmap options
- mkgmap style files
- Rules of the mkgmap style files
- Used tags for routing and address search
- TYP files
- Character support (like asian characters)
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
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 folderCommand detailed explanation:sudo
ask for superuser rights (admin) and runsapt
to installosmctools
ornsis
package from repository.~.../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:
Splitter does not only slice but also modify the file information content : the generated files are not OSM compliant anymore (cannot be read on JOSM...). Note that skipping this first step even when converting a small osm source file modify the final map and affects its usability |
~.../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
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 splitterlogPlease 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
--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 splitterEn 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
)
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
)