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
_______________________________________________ Portugal mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/portugal
