Pergunta

Estou procurando sugestões para um banco de dados ou estrutura de dados ideal para armazenar um mapa. Essencialmente, o mapa consiste de "maneiras" que são como estradas, caminhos, etc. As maneiras contêm nós (que têm uma coordenada de latitude e longitude e, às vezes, uma altitude.)

Qualquer banco de dados ou estrutura:

  1. deve ser capaz de localizar todos os nós em uma caixa delimitadora rapidamente (milissegundos)

  2. Opcionalmente, não deve se desviar consideravelmente quando um grande número de nós estiver em uma caixa delimitadora vs. um pequeno número de nós, ou se a caixa delimitadora for grande

  3. deve ser capaz de encontrar nós que se conectem diretamente: por exemplo, o nó que conecta duas maneiras

  4. só poderia ser leitura

  5. Deve ser compacto (evita desperdiçar espaço) - estou procurando encaixar um mapa do Reino Unido em menos de 1 GB. Eu tenho um SAT NAV que faz isso com cerca de 800 MB de espaço em um cartão SD.

Eu estava pensando inicialmente em quadrilátero para armazenar caminhos. Mas uma implementação rápida é complicada e eles não funcionam para nós individuais; Todos os nós são colocados no menor bbox possível.

(Estou deliberadamente usando a mesma terminologia do mapa da rua Open porque pretendo usar esses dados.)

Foi útil?

Solução

Eu recomendo com PostGIS 1.5 usando o geografia Digite como é adequado para o que você deseja, no entanto, minha única preocupação em usar algo assim em um dispositivo incorporado seria o uso da memória.

Eu construí algo vagamente relacionado usando um banco de dados não -GIS (Firebird) em Java e o desempenho foi mais do que adequado para recuperar pontos de uma caixa delimitadora (embora o SQL sofisticado fosse necessário, o que não é o caso do PostGIS).

Outras dicas

PostGIS Pode ser a melhor escolha. Nota: PostGIS é PostgreSQL com extensões geográficas. Você literalmente instala o Postgres e, em seguida, executa vários scripts que adicionam funções e tipos geográficos.

Veja o OpenStreetMap Informações sobre o PostGIS. Você pode carregar os arquivos OpenStreetMap Planet/Extratos do Planet, no PostGIS usando o OSM2PGSQL, e é isso que é feito no servidor de ladrilhos OpenStreetMap, onde o renderizador MapNIK é executado. No entanto...

Há também um esquema de banco de dados mais bruto para os dados do OpenStreetMap (tabelas chamadas "nós" e "Ways" etc.) é isso que a Principal O OpenStreetMap Database Server usa para armazenar seus dados geográficos e permitir edições em uma API. Isso não é tão inteligente quando se trata de indexação espacial etc., mas agradável e simples. Você pode criar um banco de dados neste formato, instalando o OpenStreetMap API/Site Ruby no Código dos Rails. Esta é uma maneira mais confiável de configurar uma versão atualizada do Esquema de banco de dados (definido por as migrações dos trilhos). Depois disso, você pode executar o osmose ferramenta para preencher o banco de dados.

O melhor banco de dados que conheço para dados geográficos é o PostgreSQL com extensões geográficas, mas não conheço a velocidade. Eu sei que o OSM usa isso, mas eles têm acesso a uma enorme infraestrutura de computador que é velozes. Eu também sei que eles têm vários pedidos para pessoas que podem escrever programas mais rápidos para eles.

Eu diria que o Quadtree é uma opção muito boa para lidar com dados geoespartiais, parece que você permite que os quadrados fiquem muito pequenos com o que posso dizer. Você pode tornar os limites mais macios (permita que um nó esteja em duas folhas do quadtree) e adicione uma quantidade mínima de nós por folha. Diga que qualquer folha não tem permissão para conter menos de 64 nós, e não mais que 1024.

A classificação é especialmente importante para a velocidade aqui, uma sugestão seria classificar Åreas que teria mais probabilidade de ser acessado pelo punho. Digamos que 70% de todas as solicitações seriam em Londres, então seria mais rápido ter esses dados no início do arquivo para diminuir o tempo de pesquisa.

O PostGIS não é o único banco de dados que suporta dados geoespaciais, mas o preço é muito bom. Difícil de vencer "grátis".

Mas existem outras opções gratuitas, e alguns leitores já podem ter outro sistema de banco de dados relacional em vigor e deseja aproveitar esse conhecimento em vez de ter que aprender o PostGIS. Qualquer banco de dados que suporta as especificações de consórcio geográfico aberto (OGC ou OpenGeo) será suficiente para o cenário que você descreve.

E, assim como a máxima do mundo da fotografia - "A melhor câmera é a que você tem com você" - às vezes o banco de dados espacial ideal é o que você já tem e sabe usar.

Então, aqui está uma lista de todas as opções que conheço:

RDBMS espacial - opção gratuita disponível

  • Oracle (com espacial ou localizador) (opção gratuita: Oracle XE + Locator)
  • MS SQL Server (2008 ou posterior) (opção gratuita: SQL Server Express)
  • PostGIS

RDBMS espacial - sem opção grátis

  • DB2 (com extensor espacial)
  • Informix (com lâmina espacial)

Menos do que rdbms espaciais ideais

  • MySQL espacial (conjunto de funções muito limitado)

"Extensão espacial"

  • Arcsde (você o adiciona a um RDBMS existente)

Não tenho certeza sobre o espaço, mas você pode querer usar qualquer extensão GEO para servidores comuns de banco de dados (se possível). Eles geralmente oferecem indexação geográfica rápida, baseada em caixas delimitadoras (resposta a 1 e 2) muitos procedimentos geográficos para fazer cálculos (resposta a 3, intersect(way1,way2)).

Além disso, sua pergunta é uma combinação melhor para http://gis.stackexchange.com

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top