Cálculo da Cobertura da Rede Viária
Preparação
Para se poder fazer este cálculo, são precisos dados de três fontes:
- IGP (CAOP)
- INE (População)
- OSM (para saber o que já está levantado)
Os cálculos aqui apresentados foram efectuados sobre o Postgresql, com a extensão PostGIS. Parte-se do princípio que já existe uma base de dados 'osm'.
CAOP
Descarregar a CAOP de 2010, em formato Shapefile, a partir de [1]
Como a CAOP está com os polígonos por freguesia, convém criar logo uma segunda shapefile, dissolvendo as freguesias e ficando só com os concelhos. Por ser feito no QGIS, com Vector -> Ferramentas de Geoprocessamento -> Dissolver.
Depois carregam-se as duas shapefiles no Postgis, com:
export PGCLIENTENCODING=LATIN1 ogr2ogr -overwrite -skipfailures -s_srs "+init=pt:pttm06" -t_srs EPSG:900913 -nlt MULTIPOLYGON -f "PostgreSQL" PG:"host=localhost user=geobox dbname=osm password=geobox" Cont_AAD_CAOP2010.shp ogr2ogr -overwrite -skipfailures -s_srs "+init=pt:pttm06" -t_srs EPSG:900913 -nlt MULTIPOLYGON -f "PostgreSQL" PG:"host=localhost user=geobox dbname=osm password=geobox" cont_aad_caop2010_concelho.shp
Nota: O ogr2ogr, pensado estar-lhe a fazer um grande favor, provavelmente vai substituir o EPSG:900913 pelo 900914. Se tal acontecer, terá que forçar que o SRID seja mesmo o 900913.
select updategeometrysrid('cont_aad_caop2010_concelho', 'wkb_geometry', 900913); select setsrid(wkb_geometry, 900913) from cont_aad_caop2010_concelho;
Depois de importadas as duas tabelas, convém corrigir as áreas dos municípios que se podem ter perdido no processo de dissolução.
-- actualizar as areas update cont_aad_caop2010_concelho set area_t_ha = (select sum(area_t_ha) from cont_aad_caop2010 where cont_aad_caop2010.municipio = cont_aad_caop2010_concelho.municipio)
INE
Há concelhos (para já, quase todos) para os quais não sabemos o números de km reais de rede viária existentes. Por isso, para sabermos se um concelho está muito ou pouco editado no OSM, temos que estimar um valor para o número de Km existentes nesse concelho. Para tal, ajuda saber a população do concelho, pois imaginamos que um concelho com mais densidade populacional do que outro, com a mesma área, irá ter mais rede viária.
A densidade população varia muito!
Os valores máximo e mínimos são:
Concelho | Densidade (hab./Km2) |
Amadora | 7182 |
Aljezur | 0,4 |
Para se poder utilizar a informação sobre a população, é preciso descarregar no formato CVS ou Excel o quadro da população por unidade territorial, a partir de [2].
Depois insere-se o ficheiro com os dados da população na base de dados com:
copy populacao (municipio, codigo, populacao) from '/home/jgr/Documentos/AGILE/VGI/ine_quadro_populacao_por_concelho.csv' delimiter ',' CSV HEADER
update cont_aad_caop2010_concelho set populacao = (select populacao from populacao where upper(populacao.municipio) = upper(cont_aad_caop2010_concelho.municipio))
OSM
Para inserir a informação existente no OSM na base de dados, usa-se um backup do país inteiro, que pode ser obtido a partir de [3].
Antes de importar, é necessário ter a base de dados 'osm', cá já foi referido.
osm2pgsql -H localhost -m -U geobox -W -d osm portugal.osm.bz2
Com este comando, são criadas as tabelas no PostGIS com a informação existente do OSM.
Cálculo do que existe no OSM
Preencher o total de metros de vias existentes no OSM.
update cont_aad_caop2010_concelho set totalosm = (select sum(st_length(ST_Intersection(wkb_geometry, way))) from planet_osm_line line where ST_Intersects(wkb_geometry, way) and distrito_ = 'AVEIRO' and highway IS NOT NULL)
Saber por distrito e por tipo de via, o total de metros de vias existentes no OSM. Neste caso utilizou-se o distrito do Porto.
select distrito_, highway, sum(st_length(way)) from planet_osm_line, cont_aad_caop2010 where st_contains (st_transform(wkb_geometry, 900913), way) and distrito_ ilike 'porto%' group by highway, distrito_ order by highway asc
Cálculo da estimativa de km por concelho
Aqui inventou-se largo, para não dizer outra coisa. A fórmula está a ser utilizada é a seguinte:
update cont_aad_caop2010_concelho set densidade = populacao / (area_t_ha/100)
update cont_aad_caop2010_concelho set totalestimado = (area_t_ha/100)*(2500+densidade*5)
Isto quer dizer que, para cada Km2 de território esperamos pelo menos 2,5 Km (2500 m) de rede viária. Adicionalmente, estamos também a dizer que consoante a densidade populacional, também acrescentamos mais uns km de rede viária... Isto é para ser melhorado e só se usa enquanto não tivermos dados reais dos municípios.
Actualização: já recebi os valores reais dos seguintes concelhos:
Concelho | Estimado (m) | Total (m) | Estradas (m) | Caminhos (m) | Enviado por |
---|---|---|---|---|---|
Guimaraẽs | 1.415.571 | 2.470.466 | 1.835.659 | 634.807 | Pedro |
Vale de Cambra | 489.787 | 1.442.184 | 623.184 | 819.000 | Catarina |
Sesimbra | 10.184.281 | 925.522 | 925.522 | 0 | Marta |
Cálculo da cobertura
Finalmente podemos calcular a taxa de cobertura.
update cont_aad_caop2010_concelho set percentagem = totalosm / totalestimado