Cálculo da Cobertura da Rede Viária

From OpenStreetMap Wiki
Jump to navigation Jump to search

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