Gostaria de saber qual método de armazenamento resultará na leitura mais rápida dos vetores de mapa para renderização. SHP? PostGres? SQLite? (Eles não mudam frequentemente e eu não preciso de funções espaciais para esses vetores).
Gostaria de saber qual método de armazenamento resultará na leitura mais rápida dos vetores de mapa para renderização. SHP? PostGres? SQLite? (Eles não mudam frequentemente e eu não preciso de funções espaciais para esses vetores).
Respostas:
Existem alguns testes rápidos de shapefiles versus banco de dados (PostGIS) para o MapServer nesta apresentação (de 2007).
Em suma:
E os tempos em detalhes, que também podem ajudar a decidir se o formato de armazenamento é um fator importante.
PostGIS Shapefile
Start mapserv process 15ms 15ms
Load mapfile 3ms 3ms
Connect to DB 14ms n/a
Query 20ms n/a
Fetch 7ms n/a
Draw 11ms 28ms
Write Image 8ms 8ms
Network Delay 3ms 3ms
Sempre use o FastCGI no MapServer se estiver usando um banco de dados, pois as conexões com o banco de dados podem ser reutilizadas; caso contrário, uma nova conexão deve ser criada em cada solicitação.
A velocidade de leitura de um shapefile (e dados de um banco de dados) depende da implementação de codificação específica.
O código fonte do MapServer que abre um shapefile pode ser visto aqui . Após os comentários, você pode ver como é importante ter um índice. Normalmente, você só pode ler um arquivo em uma direção para obter um registro, mas com um índice, você pode ler em duas direções.
345 /* Read the .shx file to get the offsets to each record in */
346 /* the .shp file.
Outro exemplo de abertura de um shapefile pode ser visto na fonte Python para PyShp . Novamente, você pode ver como um índice é usado para encontrar formas específicas diretamente.
As limitações do formato DBF (limites no tamanho do campo, sem suporte nulo, limites no armazenamento de texto) também devem ser levadas em consideração ao decidir sobre o uso ou não de um banco de dados.
Um banco de dados também oferece meios de proteção de dados, junção e criação de visualizações mais fáceis, registro e muitos outros recursos que você não obterá com um arquivo independente.
Ao contrário do que diz dariapra, minha experiência no desenvolvimento do Maperitive me diz que o maior gargalo está no carregamento real dos dados antes da renderização. Tudo depende muito do tamanho do conjunto de dados geral armazenado e do tamanho do conjunto de dados que você está tentando processar de uma só vez. Se você pode carregar tudo na memória, os shapefiles provavelmente são melhores do que usar um mecanismo de banco de dados.
Qual programa você usará para renderizar? Isso pode influenciar os resultados. De qualquer forma, ter um shapefile com um índice espacial (por exemplo, http://mapserver.org/utilities/shptree.html ) usado frequentemente é a técnica mais rápida. Além disso: depende da sua aplicação, mas o cache dos resultados renderizados geralmente é muito mais útil para melhorar o desempenho.
O Shapefile será o mais rápido e provavelmente a sua melhor aposta. Existe sobrecarga para qualquer banco de dados SQL e, em seguida, é gerenciado o retorno de grandes conjuntos de resultados (a conversão de tipos de dados do banco de dados para tipos de dados nativos também reduzirá a velocidade).
Tente usar um pacote de código aberto do maptools.org para fazer suas leituras. As ferramentas do ArcGIS, apesar de construídas especificamente, têm um pouco de sobrecarga para começar e são caras.
Espero que isto ajude