<div dir="ltr">Boa tarde,<br><br>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.<br><br>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).<br><br>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.<br><br><a href="https://www.dropbox.com/s/qb3xunkqnzcsw18/toponimia_v03_10JUL2015.kml?dl=0">https://www.dropbox.com/s/qb3xunkqnzcsw18/toponimia_v03_10JUL2015.kml?dl=0</a><br><br>Novamente, se alguém encontrar algum problema, por favor diga-me.<br><br>Cumprimentos,<br>António<br><br>Nota 1: O exercício é feito só para Portugal Continental.<br>Nota 2: A última linha do código serve somente para calcular a percentagem da população residente fora de lugares recensiados<br>Nota 3: A utlização do código do lugar em vez da sua designação torna o código bastante mais simples<br><br>-----<br>--código utilizado<br>-----<br><br>--toponímia 10JUL2015<br><br>-- 00 create schema<br>create schema toponimia<br><br>-- 0 criar tabela toponimos<br>drop table if exists toponimia.lugares;<br>create table toponimia.lugares as<br>select distinct("LUG11") as lug11, "LUG11DESIG" as lugar11<br>from ladministrativos.bgri2011;<br><br>    --problema<br>        select * from toponimia.lugares<br>        where lug11 = '014945'<br>    --solução<br>        DELETE FROM toponimia.lugares WHERE ctid NOT IN<br>        (SELECT max(ctid) FROM toponimia.lugares<br>        GROUP BY toponimia.lugares.lug11);<br>    --verificar<br>        select * from toponimia.lugares<br>        where lug11 = '014945'<br><br>--1 (265083 linhas na tabela original, 255844 na nova, 236835 tiranco o "Residual" do INE)<br>drop table if exists toponimia.t1;<br>create table toponimia.t1 as<br>select distinct("BGRI11") as bgri11, "LUG11" as lug11<br>from ladministrativos.bgri2011<br>where "LUG11" != '999999';<br><br>--2<br>drop table if exists toponimia.t2;<br>create table toponimia.t2 as<br>select toponimia.t1.*, censos2011.c2011definitivos.n_individuos_resident as p2011<br>from toponimia.t1 left outer join censos2011.c2011definitivos<br>    on (toponimia.t1.bgri11 = censos2011.c2011definitivos.geo_cod);<br><br>--(somas de verificação do número de residentes)<br>--select sum(n_individuos_resident) from censos2011.c2011definitivos<br>--    where nivel = '8' and substring(geo_cod from 1 for 2)::integer < 19 --10047621;<br>--select sum(p2011) from toponimia.t2 --10047621 (9874827 tirando o "Residual" do INE na T1;<br><br>--3<br>drop table if exists toponimia.t3;<br>create table toponimia.t3 as<br>select lug11, sum(p2011) as p2011<br>from toponimia.t2<br>group by lug11;<br>--25474 lugares (menos 1 -- sem o "Residual" do INE)<br><br>--(soma de verificação do número de residentes)<br>select sum(p2011) from toponimia.t3 --10047621;<br><br>--antes do 4 --> correção da topologia <br>update ladministrativos.bgri2011<br>set the_geom2 = st_makevalid(the_geom)<br><br>--4<br>drop table if exists toponimia.t4;<br>create table toponimia.t4 as<br>select "LUG11" as lug11, st_union(the_geom2) as the_geom<br>from ladministrativos.bgri2011<br>where "LUG11" != '999999'<br>group by lug11;<br>-----25473 lugares<br><br>--5<br><br>drop table if exists toponimia.t5;<br>create table toponimia.t5 as<br>select toponimia.t3.*, toponimia.t4.the_geom<br>from toponimia.t3 left outer join toponimia.t4<br>on toponimia.t3.lug11 = toponimia.t4.lug11;<br><br>--6<br>drop table if exists toponimia.t6;<br>create table toponimia.t6 as<br>select toponimia.t5.*, toponimia.lugares.lugar11<br>from toponimia.t5 left outer join toponimia.lugares<br>on toponimia.t5.lug11 = toponimia.lugares.lug11;<br><br>select 1 - 9874827::numeric / 10047621::numeric<br><br></div>