"v.extract",
gs.run_command(input="hospitals",
type="point",
="FACILITY_N = 'FLAGSTAFF MEDICAL CENTER'",
where="FMC") output
Modelando Movimento no GRASS
GRASS possui ferramentas sofisticadas para modelar o movimento pelo terreno, incluindo r.cost, r.walk, r.drain, e r.path. Neste tutorial usaremos r.walk e r.path para determinar o melhor caminho percorrido para um destino que será um hospital.
Este tutorial usa um dos conjuntos de dados de amostra padrão do GRASS: flagstaff_arizona_usa. Faremos referência a nomes de lugares nesse conjunto de dados, mas ele pode ser completado com qualquer um dos standard sample data sets para qualquer região - por exemplo, North Carolina data set. Nós usaremos o DEM de elevação de Flagstaff (elevation DEM), o arquivo de pontos vetoriais dos hospitals (qualquer outro arquivo de pontos vetoriais servirá) e o mapa raster uso do solo (landuse) .
Este tutorial foi criado para que você possa concluí-lo usando a interface gráfica do usuário (GUI) do GRASS (GRASS GUI), comandos GRASS do console ou terminal ou usando comandos GRASS em um ambiente Jupyter Notebook.
Se você não tem certeza de como começar a usar o GRASS usando sua interface gráfica de usuário ou usando Python, confira os tutoriais Get started with GRASS GIS GUI e Get started with GRASS & Python in Jupyter Notebooks.
O que é uma superfície de custo (cost surface)?
Uma superfície de custo é um raster em que cada célula representa o “custo” ou a dificuldade de se mover pela paisagem.
Uma superfície de custo cumulativa (cumulative cost surface) mostra o custo total acumulado de deslocamento de um ponto de partida até um local. Superfícies de custo cumulativo também são usadas para encontrar o caminho de menor custo (least cost path) entre um local e o ponto de partida.
A ferramenta GRASS r.walk gera uma superfície de custo cumulativo usando a regra de Naismith para tempos de caminhada, onde cada célula tem o valor em segundos do tempo que leva para caminhar do ponto inicial até essa célula.
Modelagem de movimento com uma superfície de custo cumulativa
Visão geral
Comece com um DEM de elevação para topografia para determinar os custos de movimentação.
Crie um mapa de atrito (friction map) com um valor de 0 (ou outros valores para custos de movimentação adicionais).
Selecione ponto de partida(s) (start point(s)).
Crie uma superfície de custo (cost surface).
Um caminho de menor custo (least cost) pode então ser calculado entre qualquer ponto na superfície de custo e o ponto inicial.
Mapa de atrito
O comando map calculator (calculadora de mapa) no GRASS permite criar, alterar ou combinar mapas usando álgebra de mapas (map algebra). A calculadora de mapas pode ser usada a partir da interface gráfica do usuário (GUI) ou como um comando.
Antes de fazer um mapa de fricção você faz um mapa de fricção, certifique-se de que a computational region (região computacional) corresponde ao mapa de elevação.
Crie o mapa friction0 com 0 em cada célula.
Adicione o raster de elevação (elevation) ao Gerenciador de Camadas (Layer Manager).
Clique com o botão direito do mouse na elevação (elevation) no Gerenciador de Camadas(Layer Manager).
Selecione defina a região computacional do mapa selecionado (set computational region from selected map).
Abra a Calculadora de Mapa Raster (Raster Map Calculator) na barra de ferramentas superior (ícone “ábaco/abacus”).
Preencha o nome do mapa de saída (name for new raster map to create) como friction0 e insira 0 no campo de expressão (expression).
Pressione Executar (Run).
Defina a região para corresponder ao mapa de elevação.
Crie um mapa de atrito com um valor de 0 em todas as células que corresponda à extensão e resolução do mapa de elevação.
g.region raster=elevation
r.mapcalc "friction0 = 0"
Defina a região para corresponder ao mapa de elevação.
Crie um mapa de atrito com um valor de 0 em todas as células que corresponda à extensão e resolução do mapa de elevação.
gs.run_command("g.region", raster="elevation")
gs.mapcalc("friction0 = 0")
Escolha um ponto de partida
Agora que temos um mapa DEM para terreno e um mapa de atrito, tudo o que precisamos para uma superfície de custo cumulativo é um ponto de partida: o ponto a partir do qual calcular os custos de movimento.
Um ponto inicial pode ser um ponto vetorial, uma célula raster ou até mesmo um par de coordenadas.
Uma superfície de custo em r.walk pode ter vários pontos iniciais.
Faremos um ponto de partida no Flagstaff Medical Center, encontrado no arquivo de pontos vetoriais do hospital (hospitals).
Use o Gerenciador de Tabela de Atributos (Attribute Table Manager) para hospitals:
Exiba o mapa hospitals adicionando-o ao Gerenciador de Camadas do Catálogo de Dados.
Clique com o botão direito e abra o Gerenciador de Tabela de Atributos (Attribute Table Manager).
Selecione o registro “Flagstaff Medical Center”.
Clique com o botão direito e selecione Extraia recursos selecionados (Extract selected features) do menu de contexto.
Nomeie o novo mapa como FMC.
Use a ferramenta v.extract para criar um mapa de pontos vetoriais chamado FMC a partir do mapa de hospitals.
v.extract input=hospitals type=point where="FACILITY_N = 'FLAGSTAFF MEDICAL CENTER'" output=FMC
Use the v.extract tool to create a vector point map named FMC from the hospitals map.
Use a ferramenta d.vect clicando duas vezes em FMC no gerenciador de camadas para exibir o ponto com uma cor e tamanho para vê-lo melhor.
Gerar a superfície de custo cumulativo
Use a ferramente r.walk no menu Análise Raster/Terreno (Raster/Terrain Analysis)
- Entre com o mapa de elevação (elevation), mapa de atrito (friction0), e dê o nome da superfície de custo (name for output raster map) a ser criada (FMC_cost_seconds).
Clique no botão “copiar” para copiar o comando GRASS. Você pode salvá-lo em um arquivo de texto para reutilização posterior ou para documentar seu trabalho.
- Use o comando r.walk para gerar a superfície de custo cumulativo.
r.walk elevation=elevation friction=friction0 output=FMC_cost_seconds outdir=FMC_directions start_points=FMC -k
- Use o comando r.walk para gerar a superfície de custo cumulativo.
"r.walk",
gs.run_command(="elevation",
elevation="friction0",
friction="FMC_cost_seconds",
output="FMC_directions",
outdir="FMC",
start_points="k") flags
Mapa de superfície de custo cumulativo
Cada valor de célula raster na superfície de custo é o tempo em segundos para caminhar do FMC até essa célula no terreno do DEM de Flagstaff.
Movimento através de uma superfície de custo cumulativo
Você pode transformar o tempo de caminhada em segundos em horas dividindo o mapa por 3600 usando a calculadora de mapas.
r.mapcalc "FMC_cost_hours = FMC_cost_seconds / 3600"
"FMC_cost_hours = FMC_cost_seconds / 3600") gs.mapcalc(
Podemos consultar ou filtrar essa superfície de custo cumulativo por hora para áreas de tempo de caminhada equivalente.
Por exemplo, no gerenciador de camadas (layer manager), podemos usar a ferramenta d.rast para mostrar a área dentro de uma caminhada de 2 horas do FMC e, em seguida, definir a opacidade da superfície de custo para 50% para ver o terreno subjacente.
Caminhos de menor custo
Visão geral
Também podemos traçar um caminho de menor custo (LCP), que é a rota menos custosa (com menor tempo de viagem) entre qualquer ponto na superfície de custo cumulativo e o FMC.
Imagine um caminhante perdido a nordeste de Flagstaff que precisa caminhar até o FMC.
Qual caminho levaria menos tempo?
Gerando um caminho de menor custo
Para criar um LCP no GRASS, usaremos r.path (também no menu Análise Raster/Terreno - “Raster/Terrain”).
- Insira o mapa de direções (FMC_directions) que também criamos quando criamos a superfície de custo cumulativo.
r.path input=FMC_directions format=auto vector_path=LCP_cumulative start_coordinates=477476,13914951
"r.path",
gs.run_command(input="FMC_directions",
format="auto",
="LCP_cumulative",
vector_path=[477476, 13914951]) start_coordinates
Caminho de menor custo gerado
Aqui está o resultado do LCP.
Adicionando um mapa de atrito aos custos de movimentação
Visão geral
Um mapa de atrito (friction map) pode ser usado para incorporar outros fatores além do terreno na criação de uma superfície de custo cumulativo e na modelagem de movimento.
O valor de cada célula em um raster de mapa de atrito é a quantidade de tempo de caminhada, em segundos/metro, além do tempo necessário devido ao terreno.
Podemos reclassificar (reclassify) o mapa de uso do solo para criar um mapa de atrito da quantidade de tempo extra que levaria para caminhar por diferentes tipos de cobertura do solo.
Reclassificando o uso do solo para criar um mapa fictício
Uma velocidade padrão de caminhada em terreno plano é de cerca de 5 km/h = 0,72 s/m.
Podemos então estimar que levaria mais:
3 s/m para caminhar por uma densa floresta de pinheiros e zimbros
1 s/m para atravessar uma floresta de coníferas
2 s/m para vagar pela área urbana de Flagstaff
5 s/m para escalar campos de lava
10 s/m para tentar atravessar a água
Podemos criar este mapa de atrito reclassificando o mapa de uso do solo usando r.reclass para atribuir novos valores de atrito às categorias de cobertura do solo existentes.
A ferramenta r.reclass pode ser encontrada no menu Raster/Alterar (Raster/Change).
Insira com raster o uso do solo (landuse) que será reclassificado.
Insira friction_reclassified para o mapa de saída (output) reclassificado.
Insira as regras de reclassificação diretamente na caixa de texto ou a partir de um arquivo de texto salvo. Use o símbolo * para representar tudo o que não estiver coberto pelas regras de reclassificação específicas.
11 90 95 = 10 water
21 thru 24 = 2 urban
31 = 5 lava
41 thru 43 = 1 conifer forest
52 = 3 pinyon juniper woodland
* = 0 no friction
r.reclass input=landuse output=friction_landcover rules=- << EOF
11 90 95 = 10 water
21 thru 24 = 2 urban
31 = 5 lava
41 thru 43 = 1 conifer forest
52 = 3 pinyon juniper woodland
* = 0 no friction
EOF
= """\
rules 11 90 95 = 10 water
21 thru 24 = 2 urban
31 = 5 lava
41 thru 43 = 1 conifer forest
52 = 3 pinyon juniper woodland
* = 0 no friction
"""
"r.reclass",
gs.write_command(input="landuse",
="friction_landcover",
output="-",
rules=rules) stdin
O mapa de atrito reclassificado (friction_landcover).
Modificando uma superfície de custo cumulativo com um mapa de atrito.
Agora podemos criar uma nova superfície de custo cumulativo usando esse novo mapa de atrito e convertê-lo de segundos para horas, como fizemos antes:
Siga os procedimentos na seção Gerar a superfície de custo cumulativo e substitua o novo mapa friction_landcover pelo mapa friction0 usado anteriormente.
Siga os procedimentos em e substitua o novo mapa friction_landcover pelo mapa friction0 usado anteriormente.
Converta a superfície de custo cumulativo em horas em vez de segundos seguindo os procedimentos na seção Movimento em uma superfície de custo cumulativo.
r.walk elevation=elevation friction=friction_landcover output=FMC_vegcost_seconds outdir=FMC_vegcost_directions start_points=FMC -k
r.mapcalc "FMC_vegcost_hours = FMC_vegcost_seconds / 3600"
"r.walk",
gs.run_command(="elevation",
elevation="friction_landcover",
friction="FMC_vegcost_seconds",
output="FMC_vegcost_directions",
outdir="FMC",
start_points="k")
flags"FMC_vegcost_hours = FMC_vegcost_seconds / 3600") gs.mapcalc(
Caminhos de menor custo e atrito
Podemos criar um novo LCP do caminhante encalhado para o FMC em terrenos onde a cobertura do solo também afeta o custo do movimento.
Siga os procedimentos na seção Caminho de menor custo, substituindo o novo mapa de direção feito junto com a superfície de custo cumulativo pelo mapa de atrito da cobertura do solo.
Dê a este novo LCP o nome LCP_vegcost para diferenciá-lo do LCP anterior.
r.path input=FMC_vegcost_directions format=auto vector_path=LCP_vegcost start_coordinates=477476,13914951
"r.path",
gs.run_command(input="FMC_vegcost_directions",
format="auto",
="LCP_vegcost",
vector_path=[477476, 13914951]) start_coordinates
Leva mais tempo para chegar ao FMC se o caminhante tiver que navegar por vegetação densa, além do terreno.
No mapa abaixo, o terreno colorido pela cobertura do solo; o LCP original com apenas terreno é mostrado pela linha azul. O LCP com um mapa de atrito de cobertura do solo é mostrado pela linha amarela mais grossa.