ES:Osmfilter
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:
- binario para Linux de 32 bit
- binario para Windows
- paquete osmctools en Debian, para instalar ejecutar: apt install osmctools
- paquete Homebrew en macOS, para instalar ejecutar: brew install osmfilter
- código fuente (versión más reciente)
- (código fuente anterior)
- repositorio en gitlab
- Descargar y compilar en una sola ejecución: wget -O - http://m.m.i24.cc/osmfilter.c |cc -x c - -O3 -o osmfilter
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