Imposm é um importador de dados do OpenStreetMap. Ele lê arquivos PBF e importa os dados para PostgreSQL/PostGIS. Também pode atualizar automaticamente o banco de dados com as alterações mais recentes do OSM.
Ele foi projetado para criar bancos de dados otimizados para renderização (ou seja, geração de blocos ou para serviços WMS).
Imposm >=3 é escrito em Go e é uma reescrita completa da implementação anterior do Python. Configurações/mapeamentos e arquivos de cache não são compatíveis com o Imposm 2, mas compartilham uma arquitetura semelhante.
O desenvolvimento do Imposm é patrocinado pela Omniscale.
Imposm está em uso de produção pelos autores. Ele é mantido ativamente, com foco na resolução de futuras incompatibilidades com dependências como PostGIS. No entanto, não há capacidade de apoio ao utilizador final e não serão desenvolvidas novas funcionalidades para além do âmbito existente.
Alto desempenho: Paralelo desde o início. Ele distribui análise e processamento para todos os núcleos de CPU disponíveis.
Esquemas de banco de dados personalizados: cria tabelas para diferentes tipos de dados. Isso permite um estilo mais fácil e melhor desempenho para renderização em WMS ou serviços de blocos.
Unifique valores: por exemplo, os valores booleanos 1
, on
, true
e yes
tornam-se todos TRUE
.
Filtrar por tags e valores: importe apenas os dados que você irá renderizar/usar.
Cache de nós eficiente: É necessário armazenar todos os nós para construir caminhos e relações. O Imposm usa um banco de dados de valores-chave baseado em arquivo para armazenar esses dados em cache.
Tabelas generalizadas: Cria automaticamente tabelas com resoluções espaciais mais baixas, perfeitas para renderizar grandes redes rodoviárias em baixas resoluções.
Limitar a polígonos: limite as geometrias importadas a polígonos do GeoJSON, para importações de cidade/estado/país.
Fácil implantação: binário único com dependências de tempo de execução apenas para bibliotecas comuns (GEOS e LevelDB).
Atualizações automáticas do OSM: Inclui serviço em segundo plano ( imposm run
) que baixa e importa automaticamente as alterações mais recentes do OSM.
Relações de rota: importe todos os tipos de relação, incluindo rotas.
Suporte para namespace de tabela (esquema PostgreSQL)
COPY FROM
Uma importação em modo diff em um servidor Hetzner AX102 (AMD Ryzen 9 7950X3D, 256 GB de RAM e armazenamento NVMe) de um planeta PBF de 78 GB (2024-01-29) com tabelas generalizadas e índices espaciais, etc. Isto é para uma importação que está pronta para atualizações minuciosas. O modo não-diff é ainda mais rápido.
Recomenda-se que o tamanho da memória do servidor seja aproximadamente o dobro do tamanho da extração PBF que você está importando. Por exemplo: você deve ter 192 GB de RAM ou mais para um arquivo planetário atual (2024) de 78 GB, 8 GB para uma extração regional de 4 GB, etc. As importações com discos giratórios levarão muito mais tempo e não são recomendadas.
Versões binárias estão disponíveis no GitHub.
Essas compilações são para Linux x86 de 64 bits e não requerem mais dependências. Baixe, descompacte e inicie imposm
. Os binários são compatíveis com Debian 10 e outras distribuições de 2022 ou mais recentes. Você pode compilar a partir do código-fonte se precisar oferecer suporte a distribuições mais antigas.
Existem algumas dependências:
Você precisa ir. 1.17 ou superior é recomendado.
Outras dependências são libleveldb e libgeos. O Imposm foi testado com versões recentes dessas bibliotecas, mas você pode ter sucesso com versões mais antigas. GEOS >=3.2 é recomendado, pois se tornou muito mais robusto ao lidar com geometrias inválidas.
A maneira mais rápida de instalar o Imposm é ligar:
go install github.com/omniscale/imposm3/cmd/imposm@latest
Isso irá baixar, compilar e instalar o Imposm em ~/go/bin/imposm
. Você pode alterar o local definindo o ambiente GOBIN
.
A forma recomendada de instalação é:
git clone https://github.com/omniscale/imposm3.git
cd imposm3
make build
make build
construirá o Imposm em seu caminho local e adicionará informações de versão ao seu binário.
Você também pode usar go diretamente para construir ou instalar o imposm com go build ./cmd/imposm
. No entanto, isso não definirá as informações da versão.
Go compila para binários estáticos e, portanto, o Imposm não tem dependências de tempo de execução para Go. Basta copiar o binário imposm
para o seu servidor para implantação. As bibliotecas C/C++ listadas acima ainda são necessárias.
Consulte também packaging.sh
para obter instruções sobre como construir pacotes binários para Linux.
Para melhor desempenho você deve usar LevelDB >1.21. Você ainda pode construir com suporte para 1.21 com go build -tags="ldbpre121"
ou LEVELDB_PRE_121=1 make build
.
imposm
tem vários subcomandos. Use imposm import
para importações básicas.
Para uma importação simples:
imposm import -connection postgis://user:password@host/database
-mapping mapping.json -read /path/to/osm.pbf -write
Você precisa de um arquivo JSON com o mapeamento do banco de dados de destino. Consulte example-mapping.json
para ter uma ideia do que é possível com o mapeamento.
O Imposm cria todas as novas tabelas dentro do esquema da tabela de import
. Então você terá import.osm_roads
etc. Você pode alterar as tabelas para o esquema public
:
imposm import -connection postgis://user:passwd@host/database
-mapping mapping.json -deployproduction
Você pode escrever algumas opções em um arquivo de configuração JSON:
{
"cachedir": "/var/local/imposm",
"mapping": "mapping.json",
"connection": "postgis://user:password@localhost:port/database"
}
Para usar essa configuração:
imposm import -config config.json [args...]
Para mais opções veja:
imposm import -help
Nota: O suporte TLS/SSL está desabilitado por padrão devido à falta de suporte à renegociação na implementação TLS do Go. Você pode reativar a criptografia configurando a variável de ambiente PGSSLMODE
ou a opção de conexão sslmode
como require
ou verify-full
, por exemplo: -connect postgis://host/dbname?sslmode=require
. Você precisará desabilitar o suporte à renegociação no seu servidor para evitar erros de conexão em importações maiores. Você pode fazer isso definindo ssl_renegotiation_limit
como 0 na configuração do servidor PostgreSQL.
A documentação mais recente pode ser encontrada aqui: http://imposm.org/docs/imposm3/latest/
Existe uma lista de discussão nos Grupos do Google para todas as perguntas. Você pode se inscrever enviando um e-mail para: [email protected]
Para suporte comercial, entre em contato com Omniscale.
O código-fonte está disponível em: https://github.com/omniscale/imposm3/
Você pode relatar quaisquer problemas em: https://github.com/omniscale/imposm3/issues
Imposm é lançado como código aberto sob a licença Apache 2.0. Consulte LICENÇA.
Todas as dependências incluídas como código-fonte são lançadas sob uma licença BSD. Consulte LICENSE.dep.
Todas as dependências incluídas nas versões binárias são lançadas sob uma licença BSD, exceto o pacote GEOS. O pacote GEOS é lançado como LGPL3 e está vinculado dinamicamente. Consulte LICENSE.bin.
Para executar todos os testes de unidade:
make test-unit
Existem testes de sistema que importam e atualizam dados OSM e verificam o conteúdo do banco de dados. Você precisa osmosis
para criar os arquivos PBF de teste. Existe um Makefile que cria todos os arquivos de teste, se necessário, e então executa o próprio teste.
make test
Chame make test-system
para pular os testes de unidade.
AVISO: Ele usa seu banco de dados PostgreSQL local ( esquema imposm_test_import
, imposm_test_production
e imposm_test_backup
). Altere o banco de dados com as variáveis de ambiente padrão PGDATABASE
, PGHOST
, etc.