Skip to content

Latest commit

 

History

History
126 lines (85 loc) · 5.61 KB

mc_deploy_shapefiles.md

File metadata and controls

126 lines (85 loc) · 5.61 KB

Mapas Culturais > Deploy > Shapefiles


Os SHAPEFILEs devem, preferencialmente:

  • Estar no sistema de coordenadas WGS84 (EPSG 4326), que é o sistem de coordenadas usado pelo Sistema de Posicionamento Global (GPS) e pelos Mapas Culturais. É possível converter de praticamente qualquer outro sistema de coordenadas para o WGS84 usando o Quantum GIS;
  • Consistir de um SHAPEFILE bidimensional por grupo de dados (bairros, distritos, regiões, municípios...), não múltiplos arquivos. É possível combinar múltiplos SHAPEFILEs em um usando o plugin MMQGIS do Quantum GIS e é possível converter de polyline e outros formatos vetoriais para o padrão de polígonos de duas dimensões usando o Quantum GIS;
  • Conter uma legenda por polígono;

Referência: http://suite.opengeo.org/opengeo-docs/dataadmin/pgGettingStarted/shp2pgsql.html

Utilizando shapefiles na aplicação

Os shapefiles podem ser usados para duas finalidades:

1. Como referência para gerar metadados para as entidades salvas

Cada vez que uma entidade é salva, a aplicação faz uma consulta na base de dados geográfica para saber dentro de quais polígonos aquela entidade está. Ao salvar um espaço, por exemplo, a aplicação pode automaticamente deduzir que ele está na subprefeitura da Sé, no município de São Paulo e no estado de São Paulo, e salvar esses três metadados diretamente na entidade.

Para isso, é preciso:

  • carregar os polígonos na tabela geo_division
  • editar o arquivo de configuração e adicionar a informação das divisões geográficas que serão usadas.

Ex:

'app.geoDivisionsHierarchy' => [
            'zona'          => ['name' => \MapasCulturais\i::__('Zona'),          'showLayer' => true],
            'Subprefeitura' => ['name' => \MapasCulturais\i::__('Subprefeitura'), 'showLayer' => true],
            'distrito'      => ['name' => \MapasCulturais\i::__('distrito'),      'showLayer' => true]
      ],

Onde 'zona', 'subprefeitura' e 'distrito' são os valores da coluna 'type' da tabela geo_division.

Essa configuração criará, automaticamente, os metadados geoZona, geoSubprefeitura e geoDistrito.

A propriedade 'showLayer' recebe um boolean que indica se os polígonos, presentes na tabela geo_division e registrados no arquivo de configuração, serão exibidos como uma camada na visualização do mapa.

Se não quiser que o metadado criado seja exibido na página de perfil da entidade, adicione um "_" na frente do slug.

Ex:

'app.geoDivisionsHierarchy' => [
          'distrito' => ['name' => \MapasCulturais\i::__('distrito'), 'showLayer' => true], // irá gerar o metadado geoDistrito e exibí-lo automaticamente no perfil da entidade 
          '_cidade'  => ['name' => \MapasCulturais\i::__('cidade'),   'showLayer' => true] // irá gerar o metadado geo_cidade mas não o exibirá na página de perfi da entidade
          'setor_censitario'  => ['name' => \MapasCulturais\i::__('setor_censitario'),   'showLayer' => false] // irá gerar o metadado geoSetor_censitario mas não o exibirá como uma camada na visulização dos mapas.
      ],

2. Como adicionar camadas na visualização do mapa

0. Tenha os arquivos de formas

Você necessitará, se possível no ambiente em que deseja fazer a importação, os arquivos de formas (shapefiles). Eles devem vir em um diretório com os seguintes arquivos:

NOME-DO-ARQUIVO.shp NOME-DO-ARQUIVO.shx NOME-DO-ARQUIVO.dbf

1. Verifique se PostGis está respondendo requisições.

Execute os seguintes comandos:

# su postgres
$ psql -U postgres -d mapas -c "SELECT postgis_version()"

Você verá uma mensagem como essa:

            postgis_version
---------------------------------------
 2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 row)

2 - Converta os arquivos de formato shape (.shp) para formato base de dados (.sql)

Exemplo de conversão:

shp2pgsql -W LATIN1 -I -s 4326 mapasculturais/shapefiles/BAIRRO_POP.shp BAIRRO-TEMPORARIO > bairro-shapefiles.sql

obs: é importante colocar um nome temporário para não sobreescrever alguma tabela da base.

3 - Insira o arquivo .sql gerado em uma nova tabela.

O arquivo .sql gerado tem comandos para criação de uma nova tabela com nome designado e inserção de registros. Rode esse comando para criar e inserir registros na tabela mapas:

$ psql -U mapas -d mapas -a -f /caminho/para/arquivo/bairro-shapefiles.sql

4 - Popule a tabela geo_division na base do mapas

Na base de dados do mapas, há uma tabela geo_division com os seguintes campos:


id - serial - PK parente_id - integer type - character varying (32) cod - character varying (32) name - character varying (32) geom - geometry


É necessário preencher os campos type, cod, name e geom com os valores que foram importados na tabela temporária, onde:

type: Nome da hierarquia que está sendo importada, registrada na configuração "app.geoDivisionsHierarchy" cod: Código de identificação, importado na tabela temprária do shapefiles name: Nome de exibição, importado na tabela temprária do shapefiles geom: Polígono do contorno, importado na tabela temprária do shapefiles

Após identificar na tabela temporária quais são os campos correspondentes na tabela geo_division, você pode colocar os dados utilizando INSERT e SELECT e apagar a tabela temporária.

O comando deve ser parecido com isso:

psql -d mapas -c "insert into geo_division (type, cod, name, geom) (select 'bairro', id_bairro_, nome_bairr, geom from bairro_temp)"
psql -d mapas -c "drop table if exists bairro_temp"