Operações espaciais

Instalação dos packages para manipulação de dados espaciais no R

library(sf)
library(terra)
library(dplyr)
library(spData)
library(spDataLarge)

Operações em dados espaciais

As operações espaciais, incluindo as uniões espaciais entre conjuntos de dados vetoriais, são uma parte vital da geocomputação. A idéia é que objetos espaciais podem ser modificados de várias maneiras, com base em sua localização e forma. Muitas operações espaciais têm um equivalente não espacial (atributo), portanto conceitos como subconjunto e junção de conjuntos de dados são aplicáveis também para operações espaciais.

Relações topológicas

As relações topológicas descrevem as relações espaciais entre objetos. “Relações topológicas binárias”, para dar-lhes seu nome completo, são afirmações lógicas (no sentido de que a resposta só pode ser VERDADEIRA ou FALSA) sobre as relações espaciais entre dois objetos definidos por conjuntos ordenados de pontos (tipicamente formando pontos, linhas e polígonos) em duas ou mais dimensões (Egenhofer e Herring 1990). Isso pode parecer bastante abstrato e, de fato, a definição e classificação das relações topológicas é baseada em fundamentos matemáticos publicados pela primeira vez em forma de livro em 1966 (Spanier 1995), com o campo da topologia algébrica continuando no século XXI (Dieck 2008).

Apesar de suas origens matemáticas, as relações topológicas podem ser entendidas intuitivamente com referência a visualizações de funções comumente utilizadas que testam tipos comuns de relações espaciais.

Várias relações topológicas podem ser usadas para o subconjunto espacial que determina o tipo de relação espacial que as características do objeto-alvo devem ter com o objeto a ser selecionado. A configuração padrão st_intersects é uma relação topológica ‘catch all’ que retornará características no alvo que tocam, cruzam ou estão dentro do objeto ‘sub-conjunto’ de origem. Operadores espaciais alternativos podem ser especificados com o argumento op =.

Simplificação de dados espaciais

  • Experimente
seine <- seine

plot(seine)

seine_simp = st_simplify(seine, dTolerance = 2000)  # 2000 m
plot(seine_simp)
object.size(seine)

object.size(seine_simp)

Compare a diferença entre os objetos.

Centroids

Os centroids identificam o centro dos objetos geográficos. Como as medidas estatísticas de tendência central (incluindo médias e medianas), há muitas maneiras de definir o centro geográfico de um objeto. Todas elas criam representações de pontos únicos de objetos vetoriais mais complexos.

  • Experimente
nz_centroid = st_centroid(nz)
seine_centroid = st_centroid(seine)
nz_pos = st_point_on_surface(nz)
seine_pos = st_point_on_surface(seine)

Qual a diferença das funções st_centroid e st_point_on_surface?

Buffers

Buffers são polígonos que representam a área dentro de uma determinada distância de uma feição geométrica: independentemente de a entrada ser um ponto, linha ou polígono, a saída é um polígono.

  • Experimente
seine_buff_5km = st_buffer(seine, dist = 5000)
seine_buff_50km = st_buffer(seine, dist = 50000)

Para que você utilizaria esse tipo de função?

Agregação (dissolve)

A agregação espacial pode dissolver as geometrias dos polígonos em contato no mesmo grupo.

  • Experimente
regions = aggregate(x = us_states[, "total_pop_15"], by = list(us_states$REGION),
                    FUN = sum, na.rm = TRUE)

plot(us_states)
plot(regions)

Como você geraria os mesmos mapas por meio das funções do pacote dplyr? Tente montar o código e chegar no mesmo resultado.

Sobreposição espacial

Sobreposição Espacial é um processo que permite identificar as relações entre feições de dois polígonos que compartilham a totalidade ou parte da mesma área

União

União: a camada de saída contém todas as áreas das duas camadas de entrada combinadas.

  • Experimente
us_west = us_states[us_states$REGION == "West", ]
us_west_union = st_union(us_west)

texas = us_states[us_states$NAME == "Texas", ]
texas_union = st_union(us_west_union, texas)

Qual a diferença das funções st_union e aggregate?

Clip

O recorte espacial (clip) é uma forma de subconjunto espacial que envolve mudanças nas colunas geométricas de pelo menos algumas das características afetadas quando são recortadas linhas e polígonos.

O recorte de objetos espaciais pode mudar sua geometria, mas também pode gerar subconjuntos de objetos, retornando apenas características que se cruzam (ou se cruzam parcialmente) com um objeto de clipagem/substituição.

  • Experimente
clip <- st_intersection(us_states, texas)

plot(clip)

Inteseção espacial

A camada de saída contém todas as áreas em que ambas as camadas se sobrepõem (intersecção).

  • Códigos
st_intersection(x, y, ...)

st_intersects(x, y, sparse = TRUE, ...)

st_disjoint(x, y = x, sparse = TRUE, prepared = TRUE)

st_touches(x, y, sparse = TRUE, prepared = TRUE, ...)

st_crosses(x, y, sparse = TRUE, prepared = TRUE, ...)

st_within(x, y, sparse = TRUE, prepared = TRUE, ...)

st_contains(x, y, sparse = TRUE, prepared = TRUE, ..., model = "open")

st_contains_properly(x, y, sparse = TRUE, prepared = TRUE, ...)

st_overlaps(x, y, sparse = TRUE, prepared = TRUE, ...)

st_equals(x, y, sparse = TRUE, prepared = FALSE, ...)

st_covers(x, y, sparse = TRUE, prepared = TRUE, ..., model = "closed")

st_covered_by(x, y = x, sparse = TRUE, prepared = TRUE, ..., model = "closed")

st_equals_exact(x, y, par, sparse = TRUE, prepared = FALSE, ...)

st_is_within_distance(x, y = x, dist, sparse = TRUE, ...)

Diferença entre st_intersects e st_intersection: Dentro da biblioteca sf há as operações de interseção geométrica binária, como st_intersects, e operações geométricas, como st_intersection. A função st_intersects prevê o retorno de uma matriz esparsa (padrão) ou densa dizendo-lhe com que geometria de y se sobrepõe a x. Enquanto que as operações (por exemplo, st_intersection) computarão a interseção, e retornarão novas geometrias. Se você usar o st_join, ele retornará as geometrias (originais) que se cruzam, ao invés da matriz esparsa.

  • Experimente
# create square
s <- rbind(c(1, 1), c(10, 1), c(10, 10), c(1, 10), c(1, 1)) %>% 
  list %>% 
  st_polygon %>% 
  st_sfc

plot(s)

# create rectangle
r <- rbind(c(-1, 2), c(11, 2), c(11, 4), c(-1, 4), c(-1, 2)) %>% 
  list %>% 
  st_polygon %>% 
  st_sfc

plot(r, add= TRUE, lty = 2)

# intersect points and square with st_intersection
i <- st_intersection(s, r)

plot(i, add = TRUE, lty = 2, col = "red")

Diferença

  • Função
st_difference(x, y, ...)
  • Experimente
# create square
s <- rbind(c(1, 1), c(10, 1), c(10, 10), c(1, 10), c(1, 1)) %>% 
  list %>% 
  st_polygon %>% 
  st_sfc

plot(s)

# create rectangle
r <- rbind(c(-1, 2), c(11, 2), c(11, 4), c(-1, 4), c(-1, 2)) %>% 
  list %>% 
  st_polygon %>% 
  st_sfc

plot(r, add= TRUE, lty = 2)

# intersect points and square with st_intersection
i <- st_difference(s, r)

plot(i, add = TRUE, lty = 2, col = "red")

Junção espacial

Ponto em polígono

Esta primeira abordagem seleciona apenas pontos contidos em polígonos.

  • Experimente
st_join()
a = st_sf(a = 1:3,
 geom = st_sfc(st_point(c(1,1)), st_point(c(2,2)), st_point(c(3,3))))
b = st_sf(a = 11:14,
 geom = st_sfc(st_point(c(10,10)), st_point(c(2,2)), st_point(c(2,2)), st_point(c(3,3))))

c = st_join(a, b)

a
b
c

Transformação

  • Experimente
multipoint = st_multipoint(matrix(c(1, 3, 5, 1, 3, 1), ncol = 2))
linestring = st_cast(multipoint, "LINESTRING")
polyg = st_cast(multipoint, "POLYGON")

plot(multipoint)
plot(linestring)
plot(polyg)

multipoint_2 = st_cast(linestring, "MULTIPOINT")
multipoint_3 = st_cast(polyg, "MULTIPOINT")
all.equal(multipoint, multipoint_2, multipoint_3)

Para que serve a função st_cast?

Distâncias

Diferentes conceitos de distância podem ser utilizados no tratamento de dados espaciais visando representar a impedância entre funções/atividades urbanas (conectividade).

A Distância Euclidiana é definida como a soma da raiz quadrada da diferença entre x e y em suas respectivas dimensões. Distância Euclideana: √((x1 – x2)² + (y1 – y2)²).

A Distância Manhattan tem uma definição mais simples na qual é apenas a soma das diferenças entre x e y em cada dimensão. Distância Manhattan: |x1 – x2| + |y1 – y2|.

A Distância Euclidiana seria o segmento de uma reta que conceta dois pontos no espaço. A Distância Manhattan seria um segmento de retas na vertical e na horizontal semelhante a uma rota veicular em áreas urbanas.

A distância em rede é aquela equivalente ao deslocamento real no ambiente construído e se aproxima mais da realidade. Entretanto, o esforço computacional e a demanda por dados é sempre maior.

  • Funções
st_area() 
st_length() 
st_distance()

Resumo

Previous
Next