Com o Postgis preparado, vamos criar um banco de dados habilitado para dados e consultas espaciais:
# su postgres
Crie um usuário para os mapas e um banco de dados:
$ createuser usuariomapas
$ createdb bdmapas -U usuariomapas
A partir daí, adicionaremos as funções do Postgis ao banco:
$ createlang plpgsql bdmapas
$ psql -f lwpostgis.sql -d bdmapas
O arquivo lwpostgis, nessa instalação, fica no diretório share/contrib/, dentro da árvore do PostgreSQL instalado (no nosso caso, em /usr/local/pgsql/).
Se o Commit deu certo, está pronto: você já tem um banco de dados espacial com o PostGis.
Depois dessas alterações, colete as estatísticas - o que acelera suas consultas:
$ vacuumdb -z bdmapas
Carregando seu Banco de Dados
Existem diversos formatos para armazenar mapas. São arquivos que trabalham com vetores:
$ /usr/local/pgsql/bin/psql -f /usr/local/pgsql/share/contrib/lwpostgis.sql -d mapas
$ /usr/local/pgsql/bin/vacuumdb -z mapas
Usando o loader de shapes:
shp2pgsql [<options>] <shapefile> <tablename> <database name>
Carregando diretamente (do diretório dos shapes):
$ /usr/local/pgsql/bin/shp2pgsql -c QUADRAS_region quadras mapas | /usr/local/pgsql/bin/psql -d mapas
Ou via SQL dump:
$ shp2pgsql -D roads1 roads_table my_db > roads.sql
$ psql -d my_db -f roads.sql
Índices
Os índices servem para acelerar as buscas em uma tabela de banco de dados. No caso de um banco de dados espacial, os índices aceleram muito - às vezes, reduzem o tempo das buscas em até 70%. No entanto, não vale a pena indexar tabelas quando são poucos registros. Isso se chega na tentativa e erro, mas uma regra que costuma valer é que a partir da centena de registros, passa a valer a pena indexar.
O Postgis usa o índice GIST (Generalized Search Tree), que serve para dados irregulares (arranjos de números inteiros, dados espectrais, etc).
CREATE INDEX eixos_idx ON eixos USING gist (the_geom)
Onde:
- CREATE INDEX -> cria o índice
- eixos_idx -> nome para o seu índice
- ON eixos -> define a tabela que se quer indexar
- USING gist (the_geom) -> escolhe o índice a ser usado (gist) e o campo a que vai ser aplicado (the_geom)
Recomenda-se depois executar:
VACUUM ANALYZE nometabela nomecoluna;
SELECT UPDATE_GEOMETRY_STATS(nometabela, nomecoluna);
Onde baixar mapas
Existem mapas disponíveis para download na página do IBGE, na seção de downloads: