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
est_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
eaggregate
?
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
est_intersection
: Dentro da bibliotecasf
há as operações de interseção geométrica binária, comost_intersects
, e operações geométricas, comost_intersection
. A funçãost_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 ost_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()