Mapas Culturais > Deploy > Shapefiles


Os SHAPEFILEs devem, preferencialmente:

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:

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" ```