ES:Osmfilter

From OpenStreetMap Wiki
Jump to navigation Jump to search

osmfilter es una herramienta de línea de comandos utilizada para filtrar archivos de datos de OpenStreetMap en busca de etiquetas específicas. Se pueden definir diferentes tipos de filtros para obtener objetos OSM (es decir, nodos, vías, relaciones), incluyendo sus objetos dependientes, por ejemplo, nodos de vías, vías de relaciones, relaciones de otras relaciones.

Los formatos de entrada y salida soportados son el formato .osm y el formato .o5m. Para permitir un rápido procesamiento de los datos, se recomienda utilizar el formato .o5m al menos para la entrada. El programa osmconvert te ayudará a convertir otros formatos a .o5m. Por ejemplo: ./osmconvert file.pbf -o=file.o5m

Descargar

Estas descargas están disponibles:

Como de costumbre: No hay garantía, en la medida en que lo permita la ley.

Descripción del programa

Para obtener una descripción detallada, por favor use la función de ayuda incorporada en el programa:

./osmfilter --help

Esta llamada mostrará un breve resumen de los parámetros:

./osmfilter -h

En los capítulos siguientes se muestran los casos de uso más importantes.

Filtro de objetos

Los filtros de esta categoría siempre afectarán a todo el objeto (nodos, vías o relaciones). Es decir, estos filtros deciden para cada objeto si se mantendrán en el archivo o no.

Mantener los objetos específicos y sus dependientes

./osmfilter norway.osm --keep="highway=primary =secondary waterway=river" >streets.osm
./osmfilter switzerland.o5m --keep="highway=cycleway and lit=yes" >litcycles.osm
./osmfilter europe.o5m --keep= --keep-relations="route=bus" --out-o5m >bus_lines.o5m
./osmfilter bayern.o5m --keep="admin_level=6 and name=Nürnberger\ Land" -o=nbg_boundaries.osm

Cada carácter de espacio dentro de un valor debe ser precedido por una barra diagonal invertida.

Mantener un tipo de objeto específico

Para mantener un solo tipo de objeto, especifique un filtro que sólo coincida con éste, los otros tipos deben ser descartados o no coincidir especificando un filtro vacío. Para obtener sólo los nodos con fixme=* utilice una de las siguientes formas equivalentes:

--keep-nodes="fixme=" --keep-ways= --keep-relations=
--keep= --keep-nodes="fixme="

Eliminar objetos específicos

./osmfilter europe.o5m --keep="highway=" --drop="access=no" -o=good_ways.osm

Eliminar todos los nodos, vías o relaciones

Puede eliminar todos los objetos de un tipo específico aplicando una de estas opciones (se permiten combinaciones):

--drop-nodes
--drop-ways
--drop-relations

Filtrado avanzado de objetos

Ignorar las dependencias entre objetos

Normalmente, todos los objetos que son utilizados por un objeto que incluido también se mantendrán en los datos. Por ejemplo, el filtro --keep="highway=" incluirá no sólo todas las carreteras sino también sus nodos. Lo mismo se aplica a las relaciones y sus miembros. Si no quieres que estas dependencias sean consideradas por el programa, por favor especifica esta opción:

--ignore-dependencies
Operadores booleanos

Para definir filtros complejos puedes usar los operadores booleanos and y or. El primero tiene mayor prioridad que el segundo, por lo que los términos con "and" se calcularán primero. Puede reemplazar este orden con paréntesis. Tenga en cuenta que los corchetes deben estar separados por espacios de cualquier otro corchete, operando u operador. Ejemplo de un término booleano:

--keep="place=city or ( place=town and population>=10000 )"
Comparaciones

Puede utilizar seis tipos diferentes de comparaciones:

= != < > <= >=

El programa comparará los valores ASCII alfabéticamente por defecto. Puede que no sea el orden correcto para su idioma. La diferencia más notable es que todas las letras mayúsculas van antes de la primera letra minúscula.

Para los valores numéricos, la comparación se calculará numéricamente. Eso significa que "2" viene antes que "10" aunque "10" sería el primero en orden alfabético.

Comodines

Cuando se utiliza el operador de comparación "=", se permiten comodines al principio y al final de los valores. Por ejemplo:

--keep="name=main* and highway=*ary and source=*aerial*"
Etiquetas especiales

Si es necesario comparar los metadatos, se pueden utilizar las siguientes expresiones como valores clave para el filtro:

@id @uid @user

Filtro de etiquetas

El filtro de etiquetas siempre se refiere sólo a ciertas etiquetas, nunca deciden sobre la existencia de objetos enteros. Utilice el filtro de etiquetas para definir las etiquetas que desea mantener en el archivo o para excluir.

Mantenga sólo etiquetas específicas

./osmfilter a.o5m --keep-tags="all amenity=restaurant =fast_food" -o=food.osm
./osmfilter a.o5m --keep-tags="all highway= waterway= name=" -o=ways.o5m

Use esta opción con cuidado. Eventualmente puede filtrar las etiquetas esenciales. Por ejemplo, no mantener la etiqueta type= rompería el procesamiento de la relación padre.

Eliminar etiquetas específicas

./osmfilter a.o5m --drop-tags="oneway= name=" -o=plain_ways.o5m

Eliminar información del autor

Para la mayoría de las aplicaciones no se necesitan las etiquetas de autor. Si usted decide excluir la información de nombre de usuario, id de usuario, conjunto de cambios y marca de tiempo, añada el argumento de la línea de comandos '--drop-author'. Por ejemplo:

./osmfilter a.o5m --keep="route=" --drop-author -o=b.o5m

Eliminar información del autor y número de versión

Si quiere eliminar no sólo la información del autor sino también los números de versión, use esta opción. Por ejemplo:

./osmfilter a.o5m --keep="route=" --drop-version -o=b.o5m

Tenga en cuenta el hecho de que la mayoría de los programas negarán trabajar con sus datos después de que haya eliminado los números de versión.

Modificación de etiquetas

A veces es útil cambiar ciertas etiquetas para facilitar el procesamiento de los datos.

Modificar valores

Puede especificar los valores a modificar. Por ejemplo:

./osmfilter a.o5m --modify-tags="highway=primary to =tertiary highway=secondary to =tertiary" -o=all_streets_are_small.o5m

Esto hará que todas las carreteras primarias y secundarias se conviertan en carreteras terciarias.

Modificar claves

Las claves también pueden ser modificadas:

./osmfilter a.o5m --modify-node-tags="amenity=fire_hydrant to emergency=fire_hydrant" -o=new_hydrant_syntax.o5m

Añadir nuevas etiquetas

Al igual que con el filtrado, la modificación de la etiqueta permite comparaciones. Por lo tanto, puede añadir etiquetas redundantes si esto ayuda a simplificar el procesamiento posterior de sus datos:

./osmfilter a.o5m --modify-tags="maxspeed<=20 add speed_category=slow" -o=speed_categories.o5m

No se comprueba si ya hay etiquetas con el mismo nombre de la clave. Si es necesario, utilice la función de filtro de etiquetas para evitar posibles colisiones.

Obtener estadísticas de etiquetas

Para decidir qué elementos mantener y cuáles desechar, sería útil tener una visión general de todas las etiquetas utilizadas en un archivo. Hay cuatro formatos de salida diferentes. En las siguientes secciones se presentarán estos formatos con la ayuda de ejemplos. Todos los resultados se han recortado a 10 líneas de longitud.

Lista de todas las claves

./osmfilter bremen.o5m --out-key
          5	Boden
          1	EE
         84	FIXME
          1	Fone
          7	StrVz
        113	TMC:cid_58:tabcd_1:Class
         78	TMC:cid_58:tabcd_1:Direction
        107	TMC:cid_58:tabcd_1:LCLversion
        110	TMC:cid_58:tabcd_1:LocationCode
         47	TMC:cid_58:tabcd_1:NextLocationCode

La primera columna muestra el número de ocurrencias.
Para especificar un grupo de claves vecinas, puede utilizar un comodín al final, por ejemplo:

--out-key=addr:*

Lista de todas las claves, ordenados por ocurrencia

./osmfilter bremen.o5m --out-count
      28199	highway
      22794	building
      21365	name
      18754	created_by
      17751	source
      11842	addr:housenumber
      11835	addr:street
       5925	addr:postcode
       5724	foot
       5543	addr:city

Lista de valores de una clave

./osmfilter bremen.o5m --out-key=railway
        156	abandoned
          6	abandoned_tram
         16	buffer_stop
          2	bumper_stop
          9	construction
         31	crossing
         31	disused
          8	halt
        269	level_crossing
         38	platform

Lista de valores de una clave, ordenados por ocurrencia

./osmfilter bremen.o5m --out-count=railway |head
       1570	rail
        269	level_crossing
        192	tram
        182	tram_stop
        156	abandoned
        126	spur
         81	razed
         38	platform
         31	crossing
         31	disused

Archivo de parámetros

El argumento de la línea de comandos puede ser muy largo si se especifican filtros complejos. Por favor, utilice un archivo de parámetros en su lugar y consulte este archivo con --parameter-file=. Por ejemplo:

./osmfilter europe.o5m --parameter-file=my_parameters >line_1.o5m

Archivo "my_parameters":

-v

--keep=

--keep-relations=
all
route=bus
line=1

--drop-tags=
operator=
direction=

--out-o5m

Las líneas vacías se utilizan para separar los parámetros. Los saltos de línea dentro de los parámetros se convertirán en espacios.

Pruebas de rendimiento

Pistas del planeta

16GB de ram, disco de 7200rpm

 $ time ./osmfilter new-planet-latest.o5m --keep="piste:type= or aerialway=" > pistes.osm

 real	12m5.413s
 user	4m30.465s
 sys	0m28.742s

Vías fluviales y naturales del planeta

 $ time ./osmfilter planet-121207.o5m --keep= --keep-ways="natural= or waterway=" --keep-relations="natural= or waterway=" -o=planet-natural-temp.o5m 

 real	8m6.760s
 user	5m27.622s 
 sys	0m35.670s

16GB, SSD