[Portugal] Toponímia - PT Continental (nova versão)

António M. Rodrigues amcrgrodrigues gmail.com
Sexta-Feira, 10 de Julho de 2015 - 10:03:35 PDT


Boa tarde,

Em Maio, enviei para a lista a ligação para, quem assim o desejasse,
descarregar uma camada com a geometria dos topónimos recenceados nos Censos
2011, assim como a população residente aquando desse exercício censitário.

Com a utilização dos dados, detectei um erro na soma da população
(resultante da geometria multipolígono da bgri assim como de problemas de
topologia).

Segue a ligação para uma versão atualizada, já sem erros (espero). A
limpeza da topologia é feita no postgis, o que para mim continua a não ser
a solução óptima (acho preferível fazê-lo no grass), mas por uma questão de
disponibilização do código deixei assim.

https://www.dropbox.com/s/qb3xunkqnzcsw18/toponimia_v03_10JUL2015.kml?dl=0

Novamente, se alguém encontrar algum problema, por favor diga-me.

Cumprimentos,
António

Nota 1: O exercício é feito só para Portugal Continental.
Nota 2: A última linha do código serve somente para calcular a percentagem
da população residente fora de lugares recensiados
Nota 3: A utlização do código do lugar em vez da sua designação torna o
código bastante mais simples

-----
--código utilizado
-----

--toponímia 10JUL2015

-- 00 create schema
create schema toponimia

-- 0 criar tabela toponimos
drop table if exists toponimia.lugares;
create table toponimia.lugares as
select distinct("LUG11") as lug11, "LUG11DESIG" as lugar11
from ladministrativos.bgri2011;

    --problema
        select * from toponimia.lugares
        where lug11 = '014945'
    --solução
        DELETE FROM toponimia.lugares WHERE ctid NOT IN
        (SELECT max(ctid) FROM toponimia.lugares
        GROUP BY toponimia.lugares.lug11);
    --verificar
        select * from toponimia.lugares
        where lug11 = '014945'

--1 (265083 linhas na tabela original, 255844 na nova, 236835 tiranco o
"Residual" do INE)
drop table if exists toponimia.t1;
create table toponimia.t1 as
select distinct("BGRI11") as bgri11, "LUG11" as lug11
from ladministrativos.bgri2011
where "LUG11" != '999999';

--2
drop table if exists toponimia.t2;
create table toponimia.t2 as
select toponimia.t1.*, censos2011.c2011definitivos.n_individuos_resident as
p2011
from toponimia.t1 left outer join censos2011.c2011definitivos
    on (toponimia.t1.bgri11 = censos2011.c2011definitivos.geo_cod);

--(somas de verificação do número de residentes)
--select sum(n_individuos_resident) from censos2011.c2011definitivos
--    where nivel = '8' and substring(geo_cod from 1 for 2)::integer < 19
--10047621;
--select sum(p2011) from toponimia.t2 --10047621 (9874827 tirando o
"Residual" do INE na T1;

--3
drop table if exists toponimia.t3;
create table toponimia.t3 as
select lug11, sum(p2011) as p2011
from toponimia.t2
group by lug11;
--25474 lugares (menos 1 -- sem o "Residual" do INE)

--(soma de verificação do número de residentes)
select sum(p2011) from toponimia.t3 --10047621;

--antes do 4 --> correção da topologia
update ladministrativos.bgri2011
set the_geom2 = st_makevalid(the_geom)

--4
drop table if exists toponimia.t4;
create table toponimia.t4 as
select "LUG11" as lug11, st_union(the_geom2) as the_geom
from ladministrativos.bgri2011
where "LUG11" != '999999'
group by lug11;
-----25473 lugares

--5

drop table if exists toponimia.t5;
create table toponimia.t5 as
select toponimia.t3.*, toponimia.t4.the_geom
from toponimia.t3 left outer join toponimia.t4
on toponimia.t3.lug11 = toponimia.t4.lug11;

--6
drop table if exists toponimia.t6;
create table toponimia.t6 as
select toponimia.t5.*, toponimia.lugares.lugar11
from toponimia.t5 left outer join toponimia.lugares
on toponimia.t5.lug11 = toponimia.lugares.lug11;

select 1 - 9874827::numeric / 10047621::numeric
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20150710/0bd92c9e/attachment.html>


Mais informações acerca da lista Portugal