[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