Qual é o truque espacial R mais útil?


44

R está se tornando uma ferramenta bastante forte para manipular e analisar dados espaciais. Aprendi algumas coisas úteis através de perguntas como estas na SO e pensei que poderia ser útil ter algo semelhante, mas mais orientado 'espacialmente'.

Você pode compartilhar algumas dicas e truques espaciais do R que achou úteis?


5
wiki da comunidade?
relet


ack. Obrigado. Eu acredito que vi esse, mas é fácil esquecer.
relet 10/11/10


Eu acho que esse deve ser um wiki da comunidade também, pois isso se tornou uma lista de tipos.
RK

Respostas:


38

Isso não é tanto um truque quanto é spplot()a funcionalidade embutida bacana. spplot()A capacidade de dimensionar amostras de legenda (para corresponder aos intervalos de quebra de classificação) serve como uma ferramenta pedagógica útil ao discutir a distribuição de dados de atributos e os tipos de classificação. A combinação de gráficos de distribuição cumulativa com os mapas ajuda nesse esforço.

insira a descrição da imagem aqui insira a descrição da imagem aqui

Os alunos precisam modificar apenas alguns parâmetros de script para explorar tipos de classificação e efeitos de transformação de dados. Geralmente, essa é a primeira incursão no R no que é um curso principalmente centrado no ArcGIS.

Aqui está um trecho de código:

library(rgdal) # Loads SP package by default
NE = readOGR(".", "NewEngland") # Creates a SpatialPolygonsDataFrame class (sp)

library(classInt)
library(RColorBrewer)
pal = brewer.pal(7,"Greens")
brks.qt = classIntervals(NE$Frac_Bach, n = 7, style = "quantile")
brks.jk = classIntervals(NE$Frac_Bach, n = 7, style = "jenks")
brks.eq = classIntervals(NE$Frac_Bach, n = 7, style = "equal")

# Example of one of the map plots
spplot(NE, "Frac_Bach",at=brks.eq$brks,col.regions=pal, col="transparent",
       main = list(label="Equal breaks"))
# Example of one of the cumulative dist plots
plot(brks.eq,pal=pal,main="Equal Breaks")

Ref: Análise de Dados Espaciais Aplicada com R (R. Bivand, E Pebesma e V. Gomez-Rubio)


1
muito legal! Isso parece muito útil.
DJQ

2
PolyGeo suga como um moderador
Abaixo do Radar

28

EDIT: observe que isso não funciona mais 24/10/2018, devido a novos requisitos para fontes de mapas do Google.

Fiquei muito feliz em encontrar o pacote dismo com geocodificação e download do google maps:

library(dismo)
x <- geocode('110 George Street, Bathurst, NSW, Australia')
a <- x[5:8] + c(-0.001, 0.001, -0.001, 0.001)
e <- extent(as.numeric(a))
g <- gmap(e, type = "satellite")

plot(g)

Isso é no R 2.12.0 no Windows, é trivial instalar o dismo e suas dependências lá, sem ter certeza de outros sistemas.

texto alternativo


1
Isso parece muito útil. No entanto, estou tendo problemas com o e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))anúncio de linha e recebo uma mensagem de erro Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]parece bem; alguma opinião sobre qual pode ser o problema?
DJQ

Sim, você precisa de um exemplo reproduzível
mdsumner

Estou tentando reproduzir o exemplo nesta resposta e não funciona. x <- geocode('110 George Street, Bathurst, NSW, Australia')retornos ZERO_RESULTSpor exemplo, e quando eu uso um exemplo que retorna a latitude / longitude, a funçãoe <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
DJQ

Pode haver uma maneira mais elegante de fazer isso, mas extentrequer um vetor de números. Então isso funciona e <- extent(c(x[,4], x[,5], x[,6], x[,7]) + c(-0.001, 0.001, -0.001, 0.001)).
DJQ

2
O seguinte também funciona:e <- extent(as.numeric(x[4:7]) + c(-0.001, 0.001, -0.001, 0.001))
snth


11

Também não é um truque, mas aqui estão alguns recursos / exemplos que eu coletei

Um exemplo de plotagem de pequenos mapas múltiplos de dados Areal em R usando o pacote de treliça.

Existem algumas perguntas no StackOverflow perguntando sobre mapeamento e R, e aqui está uma com um bom exemplo. Gostaria de olhar para as outras respostas e os recursos que eles fornecem (além de procurar mais alguns exemplos) no SO também.

Brad já deu um link diferente para o mesmo grupo r-sig-geo . É muito ativo, e Roger Bivand responde a perguntas praticamente todos os dias no grupo. Ambos relacionados à programação e análise estatística.

Além de verificar a página espacial do cran, eu também sugeriria especificamente verificar a página Spatstat mantida por Adrian Baddeley. Muitos exemplos, um curso e um próximo e-book. (No momento, estou fazendo o curso de Spatstat , e acho que é uma introdução muito mais suave do que o livro de Bivand).

Não é um recurso gratuito, mas para qualquer pessoa interessada no RI, sugiro que você acesse o Use R! série de Springer. O livro de Análise de Dados Espaciais Aplicados com R é diretamente pertinente (também o livro Guia para Iniciantes de R é o meu livro de aprendizado sugerido sobre R).

Um e-book gratuito, Um Guia Prático de Mapeamento Geoestatístico (Hengl 2009), apresenta exemplos de geoestatos aplicados em R, GRASS e Google Earth (KML).

Se eu encontrar mais bons exemplos, continuarei atualizando (espero que outras pessoas também publiquem bons exemplos!)


Obrigado Andy. Eu gosto de exemplo de treliça. Concordo totalmente com Bivand et al. livro - ótimo recurso.
Radek

10

Para análise raster, o pacote raster é extremamente poderoso. Ao lado do manual padrão, existem algumas vinhetas para começar.


Para tudo o que o pacote raster não suporta, porque funciona com RAM, você pode considerar o gdal_Utlis, que fornece a função de wrapper para o uso do gdal, permitindo processar arquivos grandes.
joaoal

7

Eu não sou usuário do PostGIS, mas depois de sugerir polígonos Voronoi para uma pergunta do vizinho mais próximo , pesquisei um pouco. Eu descobri que com o R, você pode criar polígonos Voronoi para o PostGIS . Estou impressionado.


Tenho certeza de que existem maneiras mais fáceis do que sugerir, mas você pode criar Tesselations no pacote spatstat e, em seguida, converter esse tessobjeto em um spobjeto usando esta função fornecida por Adrian Baddeley. De um spobjeto, você pode exportá-lo para um shapefile, se desejar.
Andy W



4

Com esta função, você pode facilmente fazer junções espaciais, mas apenas se todas as áreas forem preenchidas por polígonos.

library(rgeos)
library(sp) 
library(maptools)
library(rgdal)
library(sp)
xy.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/points.shp")
manzana.map <- readShapeSpatial("http://www.udec.cl/~jbustosm/manzanas_from.shp" )

IntersectPtWithPoly <- function(x, y) { 
# Extracts values from a SpatialPolygonDataFrame with SpatialPointsDataFrame, and appends table (similar to 
# ArcGIS intersect)
# Args: 
#   x: SpatialPoints*Frame
#   y: SpatialPolygonsDataFrame
# Returns:
# SpatialPointsDataFrame with appended table of polygon attributes

  # Set up overlay with new column of join IDs in x
  z <- overlay(y, x)

  # Bind captured data to points dataframe
  x2 <- cbind(x, z)

  # Make it back into a SpatialPointsDataFrame 
  # Account for different coordinate variable names 
  if(("coords.x1" %in% colnames(x2)) & ("coords.x2" %in% colnames(x2))) {
    coordinates(x2) <- ~coords.x1 + coords.x2  
  } else if(("x" %in% colnames(x2)) & ("x" %in% colnames(x2))) {
    coordinates(x2) <- ~x + y 
  }

  # Reassign its projection if it has one
  if(is.na(CRSargs(x@proj4string)) == "FALSE") {
    x2@proj4string <- x@proj4string  
  }
  return(x2)
}


test<-IntersectPtWithPoly (xy.map,manzana.map)

3

Exemplo de análise de padrão de pontos:

#Load library
library(spatstat) 
#create some coordinates        
x=c(78,120,150,17,20,402) 
#prepare the window range      
y=c(70,103,100,205,200,301)
win=owin(range(x),range(y)) 
#create the point pattern
p <- ppp(x,y,window=win)
#Plot it
plot(p) 

Cria um padrão de pontos e o descreve. O pacote spatstat possui várias funções para analisar dados geográficos. Aqui estão alguns tutoriais do spatstat :


1

Não tenho certeza se isso se qualifica como um "truque", mas sou um grande fã da combinação do acspacote (para selecionar dados do Censo dos EUA) e do leafletpacote (para criar mapas javascript interativos que podem ser hospedados on-line).

Este tutorial faz um excelente trabalho ilustrando o benefício de usar esses dois pacotes juntos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.