[Portugal] Toponímia PT Continental

António M. Rodrigues amcrgrodrigues gmail.com
Terça-Feira, 26 de Maio de 2015 - 06:56:18 PDT


Boa tarde,

Como não existe ou não está disponível nenhuma cobertura com os topónimos
(lugares) portugueses, produzi uma a partir da informação do censos 2011 (
http://mapas.ine.pt/download/index2011.phtml). Adicionei a população
residente em cada lugar.

Quem estiver interessado, pode descarregar aqui:
https://www.dropbox.com/s/3t3xejnos7haf4y/toponimia_v02_26052015.kml?dl=0

Esta informação é produzida numa base de dados PostgreSQL com PostGIS. Para
quem estiver interessado, coloco o código no final do mail. Quem detectar
erros ou tiver uma forma mais "limpa" de obter o mesmo resultado, agradeço
que partilhe.

Cumprimentos,
António

-------------------------
drop table if exists uniao1;
create table uniao1 as
SELECT
   substring(brgi2011."BGRI11" from 1 for 6) as dicofre,
   ladministrativos.brgi2011."LUG11DESIG" as lugar,
   SUM(censos2011.c2011definitivos.n_individuos_resident) as populacao,
   st_union(ladministrativos.brgi2011.the_geom) as the_geom
FROM
  censos2011.c2011definitivos,
  ladministrativos.brgi2011
WHERE
  ladministrativos.brgi2011."BGRI11" = censos2011.c2011definitivos.geo_cod
AND
  ladministrativos.brgi2011."LUG11DESIG" != 'Residual'
--AND (substring(brgi2011."BGRI11" from 1 for 4) = '1418' or
substring(brgi2011."BGRI11" from 1 for 4) = '1411')
GROUP BY
dicofre, lugar
ORDER BY populacao DESC;

alter table uniao1
add column unico serial;
------------------------------------------------------------------------------

drop table if exists pre_set1;
create table pre_set1 as
SELECT a.lugar, a.unico, a.the_geom, sum(a.populacao) as populacao FROM
uniao1 AS a,
uniao1 AS b
WHERE a.lugar = b.lugar
AND ST_Touches(a.the_geom, b.the_geom)
GROUP BY a.lugar, a.unico, a.the_geom
order by lugar;

drop table if exists set1;
create table set1 as
select pre_set1.lugar, st_union(pre_set1.the_geom) as the_geom,
sum(pre_set1.populacao) as populacao
from pre_set1
group by pre_set1.lugar;

drop table if exists set2;
create table set2 as
SELECT a.lugar, a.the_geom, sum(a.populacao) as populacao
FROM uniao1 AS a
where a.unico not in
(select unico from pre_set1)
group by lugar, unico, the_geom;

drop table if exists toponimia_v02_26052015;
create table toponimia_v02_26052015 as
select * from set1
union
select * from set2;
-------------------------
--campo com centroids

alter table toponimia_v02_26052015
add column the_geom_centros geometry;

update toponimia_v02_26052015
set the_geom_centros = st_pointonsurface(the_geom);
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20150526/6edf965b/attachment.html>


Mais informações acerca da lista Portugal