ES:Osmosis

From OpenStreetMap Wiki
Jump to navigation Jump to search

broom

Help (89606) - The Noun Project.svg

Subpáginas
Instalación
Instalación rápida (Windows)
Guía de uso
Ejemplos
Benchmarking / Tuning
Desarrollo
Plugins

Osmosis es una aplicación Java para procesado de datos OSM mediante una interfaz de línea de comandos. Se trata de una herramienta compuesta por una serie de componentes que pueden encadenarse para llevar a cabo operaciones complejas. Por ejemplo, determinados componentes permiten leer / escribir bases de datos y archivos, otros permiten detectar o aplicar cambios a los conjuntos de datos, ordenar los datos, etc. La herramienta se ha desarrollado de manera que permita añadir fácilmente nuevas funcionalidades, sin tener que reescribir tareas habituales como las relativas a la gestión de archivos y bases de datos.

A continuación se dan algunos ejemplos de las tareas que Osmosis permite llevar a cabo:

Osmosis también puede incluirse como una biblioteca dentro de otras aplicaciones Java.[1]

Estado actual

Osmosis se encuentra en un estado en el que es poco probable que la mayor parte del código base pueda cambiar demasiado. Se irán añadiendo nuevas funcionalidades y plugins, sin eliminar las ya existentes. Cualquier información sobre errores de la aplicación es bienvenida.

La versión más reciente solo admite el modelo de datos de la API 0.6 de OSM .

Descarga

Última versión estable

Siempre que sea posible, se recomienda utilizar las versiones estables que se detallan a continuación.

Soporte para la API 0.5

La versión 0.35 fue la última que admitía la API 0.5.

Esquema de la BD

(verOsmosis/PostGIS_Setup)

Los scripts de creación del esquema de bases de datos para cada versión de la API se facilitan como parte de los archivos de distribución de Osmosis, en el directorio script/contrib.

Los scripts de creación de esquemas pg_simple y pg_snapshot de PostGIS (a partir de la versión 0.39 de Osmosis) se facilitan como parte de los archivos de distribución de Osmosis, en el directorio script.

Código fuente

El repositorio Git se encuentra alojado en: https://github.com/openstreetmap/osmosis

(Más información en la subpágina de instrucciones Osmosis/Instalación)

Instalación

Linux

Sigue las instrucciones detalladas en Osmosis/Installation#Linux

OS X

Sigue las instrucciones detalladas en Osmosis/Installation#OS X

Windows

Sigue las instrucciones detalladas en Osmosis/Instalación rápida (Windows). Desde octubre de 2015, es necesario modificar manualmente el archivo osmosis.bat, para lo cual se dan las instrucciones pertinentes.

Instrucciones de uso

Guía para principiantes

Quienes comiencen a trabajar con Osmosis deben tener en cuenta los siguientes aspectos:

  • Osmosis es una herramienta Java, así que puede ser necesario tener ciertos conocimientos sobre java environmental settings,
  • el orden en que se introducen los argumentos de las funciones importa,
  • para evitar problemas, se aconseja no procesar archivos comprimidos,
  • se aconseja comenzar echando un vistazo a examples first, ya que la guía detallada de uso puede resultar demasiado compleja para principiantes.

Guía de uso detallado

La descripción completa de todas las funciones y cómo usarlas está disponible en los siguientes enlaces:

Se puede acceder a las guías de uso para versiones anteriores desde los siguientes enlaces:

Para mejorar el rendimiento, se aconseja consultar Tuning y /Benchmarking.

También hay disponible una interfaz de usuario para Osmosis, denominada OSMembrane.

Ejemplos de uso

(Más en la subpágina Osmosis/Examples.)

Ejemplo de cómo extraer datos de los radares existentes en un área determinada:

osmosis --read-pbf \myregion.pbf --node-key-value keyValueList="highway.speed_camera" --write-xml radar.osm 

Si deseásemos extraer todas las carreteras, utilizaríamos los parámetros para filtro de etiquetas de la siguiente manera:

osmosis --read-xml city.osm --tf accept-ways highway=* --used-node --write-xml highways.osm

La sentencia anterior permite extraer las vías que tienen determinadas etiquetas. Al incluir el parámetro --used-node, la extracción contendrá únicamente nodos pertenecientes a las vías resultantes del filtro anterior. Las relaciones permanecen intactas.

El siguiente ejemplo tendrá como resultado un archivo con las vías etiquetadas railway=tram o railway=tram_stop.

osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node --write-xml city_tram.osm

La ejecución de estas sentencias en archivos de gran tamaño (por ejemplo un archivo planet), puede ser interpretada como una violación de acceso, debido a limitaciones de memoria. Una forma de evitar esto es pasar idTrackerType=BitSet como parámetro de --used-node:

osmosis --read-xml city.osm --way-key-value keyValueList="railway.tram,railway.tram_stop" --used-node idTrackerType=BitSet --write-xml city_tram.osm

Si quisiéramos extraer todos los elementos relativos a una etiqueta, exceptuando determinados valores de esa etiqueta, utilizaríamos el comando reject. En el siguiente ejemplo se extraen todas las carreteras, excepto las que tengan los valores de motorway o motorway_link:

osmosis \
  --read-xml input.osm \
  --tf accept-ways highway=* \ 
  --tf reject-ways highway=motorway,motorway_link \
  --tf reject-relations \
  --used-node \
  --write-xml output.osm

A continuación se muestra cómo exportar un archivo planet desde una base de datos local PostgreSQL:

osmosis --read-apidb host="x" database="x" user="x" password="x" --write-xml file="planet.osm"

Para generar el changeset entre dos archivos planet, se utilizaría el siguiente comando. El primer archivo planet ("planet1.osm") sería el archivo resultante una vez realizados los cambios; el segundo archivo ("planet2.osm") sería el que existía antes de haberlos realizado.

osmosis --read-xml file="planet1.osm" --read-xml file="planet2.osm" --derive-change --write-xml-change file="planetdiff-1-2.osc"

Para generar el changeset que permita identificar los cambios entre un archivo planet y una base de datos local PostgreSQL habría que ejecutar los siguientes comandos:

osmosis --read-xml file="planet1.osm" --read-apidb host="x" database="x" user="x" password="x" --derive-change --write-xml-change file="planetdiff-1-2.osc"

Para aplicar un changeset a un archivo planet se usarían los siguientes comandos:

osmosis  --read-xml-change file="planetdiff-1-2.osc" --read-xml file="planet1.osm" --apply-change --write-xml file="planet2.osm" 

o bien, para versiones antiguas de la API:

osmosis  --read-xml file="planet1.osm" --read-xml-change file="planetdiff-1-2.osc" --apply-change --write-xml file="planet2.osm" for the older version

Para ordenar el contenido de un archivo planet:

osmosis --read-xml file="data.osm" --sort type="TypeThenId" --write-xml file="data-sorted.osm"

Todos los ejemplos anteriores utilizan una conexión estándar de tipo pipe. Esta conexión funciona siempre que cada tarea se especifique en el orden correcto, ya que el resultado de cada tarea es necesario para poder llevar a cabo la siguiente. Esta es la razón por la que, en los ejemplos anteriores, para aplicar conjuntos de cambios es necesario leer los datos del archivo que deseamos actualizar y del archivo de changesets de forma previa a ejecutar el comando "--apply-change".

Es posible utilizar otra pipe que no sea la estándar. En el ejemplo siguiente, se muestra una misma tarea utilizando (en primer lugar) la pipe estándar, y en segundo lugar una pipe que conecta explícitamente dos archivos, a la que hemos llamado "mypipe".

osmosis --read-xml file="planetin.osm" --write-xml file="planetout.osm"
osmosis --read-xml file="planetin.osm" outPipe.0="mypipe" --write-xml file="planetout.osm" inPipe.0="mypipe"

Para extraer un área definida por un archivo Osmosis/Polygon Filter File Format:

osmosis --read-xml file="planet-latest.osm" --bounding-polygon file="country2pts.txt" --write-xml file="germany.osm"

Cabe destacar que los filtros --way-key-value y --node-key-value no se pueden ejecutar simultáneamente en una misma sentencia. En vez de ello, será necesario crear dos (o más) archivos, a partir de distintas sentencias, y unir los archivos resultantes posteriormente, mediante el comando merge. Para unir n archivos, el comando merge deberá ser utilizado n-1 veces, como se muestra en el ejemplo siguiente:

osmosis --rx 1.osm --rx 2.osm --rx 3.osm --merge --merge --wx merged.osm

Por ejemplo, si quisiéramos extraer los restaurantes de una ciudad, habría que tener en cuenta que pueden ser cartografiados como nodos o vías, y por tanto sería necesario ejecutar 3 comandos: uno para extraer los nodos etiquetados como amenity=restaurant, otro para extraer las vías etiquetadas de la misma manera (amenity=restaurant), y el tercero para unir los elementos resultantes en un único archivo:

osmosis --read-xml input.osm --tf accept-nodes amenity=restaurant --tf reject-ways --tf reject-relations --write-xml output-nodes.osm

osmosis --read-xml input.osm --tf accept-ways amenity=restaurant --tf reject-relations --used-node --write-xml output-ways.osm

osmosis --rx output-ways.osm --rx output-nodes.osm --merge --wx merged.osm

Extracción del rectángulo envolvente

Uno de los casos de uso más habituales de Osmosis consiste en extraer un subconjunto OSM XML de un archivo de gran tamaño descargado del repositorio de OSM. Por ejemplo, podríamos haber descargado el archivo de cobertura mundial de OSM (planet.osm) y necesitaríamos extraer una región específica, o bien podríamos haber descargado un archivo relativo a un país, pero nos podría interesar únicamente una ciudad. La forma más sencilla de realizar esta extracción es mediante un rectángulo envolvente.

En el siguiente ejemplo, se extrae la ciudad de Nuremberg y sus alrededores de un archivo mayor, utilizando las coordenadas del rectángulo que engloba la ciudad:

bzcat downloaded.osm.bz2 | osmosis  --read-xml enableDateParsing=no file=-  --bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201 --write-xml file=- | bzip2 > extracted.osm.bz2

En el comando anterior, se ha utilizado el programa bzip2 directamente para extraer y comprimir la información, ya que se considera más efectivo que utilizar la aplicación integrada en Osmosis.

La forma más rápida de obtener las coordenadas que nos interesan en cada caso es utilizar www.openstreetmap.org. Haciendo doble clic sobre un punto, luego hacer clic sobre "Permalink" y anotar los datos que aparecen en el campo URL.

Notas para Windows

bzcat es la herramienta que se recomienda usar incluso en Windows para optimizar el rendimiento. Sin embargo, /dev/stdin no es una ruta válida en Windows. En vez de esa ruta,

se recomienda utilizar CONIN$.

Dónde resolver dudas e informar de errores

El mejor lugar para conseguir respuestas para preguntas relativas al uso de osmosis es la lista de correo de desarrolladores de osmosis.

https://lists.openstreetmap.org/listinfo/osmosis-dev

Por favor, plantea los posibles errores en la lista antes de crear nuevos tickets. Si estás seguro de haber encontrado un error, puedes registrarlo en el sistema OSM trac, en el apartado correspondiente a osmosis:

https://trac.openstreetmap.org/query?component=osmosis

Véase también

Desarrollo

Los detalles relativos al desarrollo de osmosis están disponibles en Osmosis/Development. Accede a dicho apartado para consultar la documentación relativa a la estructura interna de osmosis, decisiones de diseño, configuración de entornos de desarrollo, etc.

Notas

La mínima versión admitida de Java es la 1.6, ya que osmosis utiliza diversas clases java.awt.geom que aparecen únicamente a partir de dicha versión. Reescribiendo dichas clases, sería posible utilizar la versión 1.5. Osmosis utiliza elementos generales, y características java.util.concurrent que requieren como mínimo la versión 1.5 de Java.

La aplicación integrada en osmosis built-in bzip2 (.bz2) tiene un rendimiento mucho más lento que la aplicación integrada en Java gzip (.gz), ya que esta última utiliza código nativo para mejorar el rendimiento. Sin embargo, bzip2 crea archivos comprimidos mucho más pequeños que gzip. Además, las descargas planet utilizan diversas características de bzip2 que no están recogidas en la biblioteca integrada bzip2 (streams). Para trabajar con estas, y para procesar más rápidamente archivos de gran tamaño, se recomienda utilizar las implementaciones nativas de bzip2 en cada plataforma, y leer y escribir archivos en los directorios /dev/stdin y /dev/stdout respectivamente.

pbzip2 -d -c planet.osm.bz2 | bin/osmosis --rx /dev/stdin --wx /dev/stdout | gzip -c > planet-same.osm.gz

Véase también /Benchmarking

En plataformas Win 7 de 64 bits podría ser necesario ejecutar el archivo .bat desde la ventana de comandos. El archivo osmosis.bat podría requerir que se incluyera la ruta completa del java.exe insertado.

Referencias