Imposm es un importador de datos de OpenStreetMap. Lee archivos PBF e importa los datos a PostgreSQL/PostGIS. También puede actualizar automáticamente la base de datos con los últimos cambios de OSM.
Está diseñado para crear bases de datos optimizadas para renderizado (es decir, generación de mosaicos o para servicios WMS).
Imposm >=3 está escrito en Go y es una reescritura completa de la implementación anterior de Python. Las configuraciones/asignaciones y los archivos de caché no son compatibles con Imposm 2, pero comparten una arquitectura similar.
El desarrollo de Imposm está patrocinado por Omniscale.
Imposm está en uso de producción por parte de los autores. Se mantiene activamente, centrándose en resolver futuras incompatibilidades con dependencias como PostGIS. Sin embargo, no hay capacidad para brindar soporte al usuario final y no se desarrollarán nuevas funciones más allá de su alcance actual.
Alto rendimiento: paralelo desde cero. Distribuye el análisis y el procesamiento a todos los núcleos de CPU disponibles.
Esquemas de bases de datos personalizados: crea tablas para diferentes tipos de datos. Esto permite un estilo más sencillo y un mejor rendimiento para la renderización en WMS o servicios de mosaicos.
Unificar valores: por ejemplo, los valores booleanos 1
, on
, true
y yes
se vuelven TRUE
.
Filtrar por etiquetas y valores: solo importa los datos que vas a renderizar/usar.
Caché de nodos eficiente: es necesario almacenar todos los nodos para construir formas y relaciones. Imposm utiliza una base de datos de valores clave basada en archivos para almacenar en caché estos datos.
Tablas generalizadas: crea automáticamente tablas con resoluciones espaciales más bajas, perfectas para renderizar grandes redes de carreteras en bajas resoluciones.
Limitar a polígonos: limite las geometrías importadas a polígonos desde GeoJSON, para importaciones de ciudad/estado/país.
Fácil implementación: binario único con dependencias de tiempo de ejecución únicamente para bibliotecas comunes (GEOS y LevelDB).
Actualizaciones automáticas de OSM: incluye un servicio en segundo plano ( imposm run
) que descarga e importa automáticamente los últimos cambios de OSM.
Relaciones de ruta: importe todos los tipos de relaciones, incluidas las rutas.
Soporte para espacio de nombres de tabla (esquema PostgreSQL)
COPY FROM
Una importación en modo diff en un servidor Hetzner AX102 (AMD Ryzen 9 7950X3D, 256GB RAM y almacenamiento NVMe) de un planet PBF de 78GB (2024-01-29) con tablas generalizadas e índices espaciales, etc. tarda alrededor de las 7:30h. Esto es para una importación que está lista para actualizaciones minuciosas. El modo sin diferencias es aún más rápido.
Se recomienda que el tamaño de la memoria del servidor sea aproximadamente el doble del tamaño del extracto PBF que está importando. Por ejemplo: debe tener 192 GB de RAM o más para un archivo planet actual (2024) de 78 GB, 8 GB para un extracto regional de 4 GB, etc. Las importaciones con discos giratorios tardarán mucho más y no se recomiendan.
Las versiones binarias están disponibles en GitHub.
Estas compilaciones son para Linux x86 de 64 bits y no requieren más dependencias. Descargar, descomprimir e iniciar imposm
. Los binarios son compatibles con Debian 10 y otras distribuciones a partir de 2022 o posteriores. Puede compilar desde el código fuente si necesita admitir distribuciones más antiguas.
Hay algunas dependencias:
Necesitas ir. Se recomienda 1.17 o superior.
Otras dependencias son libleveldb y libgeos. Imposm se probó con versiones recientes de estas bibliotecas, pero es posible que tenga éxito con versiones anteriores. Se recomienda GEOS >=3.2, ya que se volvió mucho más robusto al manejar geometrías no válidas.
La forma más rápida de instalar Imposm es llamar:
go install github.com/omniscale/imposm3/cmd/imposm@latest
Esto descargará, compilará e instalará Imposm en ~/go/bin/imposm
. Puede cambiar la ubicación configurando el entorno GOBIN
.
La forma recomendada de instalación es:
git clone https://github.com/omniscale/imposm3.git
cd imposm3
make build
make build
construirá Imposm en su ruta local y agregará información de la versión a su binario.
También puede usar directamente go para compilar o instalar imposm con go build ./cmd/imposm
. Sin embargo, esto no establecerá la información de la versión.
Go compila en binarios estáticos, por lo que Imposm no tiene dependencias de tiempo de ejecución con Go. Simplemente copie el binario imposm
a su servidor para su implementación. Sin embargo, las bibliotecas C/C++ enumeradas anteriormente aún son necesarias.
Consulte también packaging.sh
para obtener instrucciones sobre cómo crear paquetes binarios para Linux.
Para un mejor rendimiento, debe utilizar LevelDB >1.21. Aún puedes compilar con soporte para 1.21 con go build -tags="ldbpre121"
o LEVELDB_PRE_121=1 make build
.
imposm
tiene múltiples subcomandos. Utilice imposm import
para importaciones básicas.
Para una importación simple:
imposm import -connection postgis://user:password@host/database
-mapping mapping.json -read /path/to/osm.pbf -write
Necesita un archivo JSON con la asignación de la base de datos de destino. Consulte example-mapping.json
para tener una idea de lo que es posible con el mapeo.
Imposm crea todas las tablas nuevas dentro del esquema de la tabla de import
. Entonces tendrás import.osm_roads
, etc. Puedes cambiar las tablas al esquema public
:
imposm import -connection postgis://user:passwd@host/database
-mapping mapping.json -deployproduction
Puede escribir algunas opciones en un archivo de configuración JSON:
{
"cachedir": "/var/local/imposm",
"mapping": "mapping.json",
"connection": "postgis://user:password@localhost:port/database"
}
Para usar esa configuración:
imposm import -config config.json [args...]
Para más opciones ver:
imposm import -help
Nota: La compatibilidad con TLS/SSL está deshabilitada de forma predeterminada debido a la falta de compatibilidad con la renegociación en la implementación de TLS de Go. Puede volver a habilitar el cifrado configurando la variable de entorno PGSSLMODE
o la opción de conexión sslmode
para require
o verify-full
, por ejemplo: -connect postgis://host/dbname?sslmode=require
. Deberá desactivar el soporte de renegociación en su servidor para evitar errores de conexión en importaciones más grandes. Puede hacer esto configurando ssl_renegotiation_limit
en 0 en la configuración de su servidor PostgreSQL.
La documentación más reciente se puede encontrar aquí: http://imposm.org/docs/imposm3/latest/
Hay una lista de correo en Grupos de Google para todas las preguntas. Puedes suscribirte enviando un correo electrónico a: [email protected]
Para soporte comercial comuníquese con Omniscale.
El código fuente está disponible en: https://github.com/omniscale/imposm3/
Puede informar cualquier problema en: https://github.com/omniscale/imposm3/issues
Imposm se lanza como código abierto bajo la licencia Apache 2.0. Ver LICENCIA.
Todas las dependencias incluidas como código fuente se publican bajo una licencia tipo BSD. Consulte LICENCIA.dep.
Todas las dependencias incluidas en las versiones binarias se publican bajo una licencia tipo BSD, excepto el paquete GEOS. El paquete GEOS se lanza como LGPL3 y está vinculado dinámicamente. Consulte LICENCIA.bin.
Para ejecutar todas las pruebas unitarias:
make test-unit
Hay pruebas del sistema que importan y actualizan datos de OSM y verifican el contenido de la base de datos. Necesita osmosis
para crear los archivos PBF de prueba. Hay un Makefile que crea todos los archivos de prueba si es necesario y luego ejecuta la prueba.
make test
Llame make test-system
para omitir las pruebas unitarias.
ADVERTENCIA: Utiliza su base de datos PostgreSQL local (esquema imposm_test_import
, imposm_test_production
y imposm_test_backup
). Cambie la base de datos con las variables de entorno estándar PGDATABASE
, PGHOST
, etc.