Quelle est l'astuce de R spatiale la plus utile?

44

R devient un outil assez puissant pour manipuler et analyser des données spatiales. J'ai appris des choses utiles par le biais de questions comme celle- ci à SO et j'ai pensé qu'il pourrait être utile d'avoir quelque chose de similaire, mais plus orienté «spatialement».

Pouvez-vous partager quelques conseils et astuces de R spatial que vous avez trouvés utiles?

radek
la source
5
wiki de la communauté?
reloué
ack. Merci. Je crois avoir vu celui-là, mais c'est facile à oublier.
reloué
3
Aussi: rspatialtips.org.uk
radek
Je pense que cela devrait également être un wiki de communauté car il est devenu une liste de toutes sortes.
RK

Réponses:

38

Ce n’est pas vraiment une astuce, c’est une spplot()fonctionnalité intégrée astucieuse. spplot()La capacité du logiciel à mettre à l'échelle les échantillons de légende (afin de correspondre aux plages de sauts de classification) constitue un outil pédagogique utile lors de la discussion sur la distribution des données d'attribut et les types de classification. La combinaison des tracés de distribution cumulative avec les cartes aide dans cette entreprise.

entrez la description de l'image ici entrez la description de l'image ici

Les étudiants n’ont besoin que de modifier quelques paramètres de script pour explorer les types de classification et les effets de transformation des données. Il s’agit généralement de leur première incursion dans R dans un cours essentiellement centré sur ArcGIS.

Voici un extrait de code:

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")

Réf: Analyse appliquée de données spatiales avec R (R. Bivand, E. Pebesma et V. Gomez-Rubio)

MannyG
la source
1
très sympa! Cela semble très utile.
Djq
2
PolyGeo est nul en tant que modérateur
Au
28

EDIT: notez que cela ne fonctionne plus le 2018-10-24, en raison de nouvelles exigences pour les sources cartographiques Google.

J'étais assez heureux de trouver le package dismo avec géocodage et téléchargement de 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)

C’est dans R 2.12.0 sous Windows, il est facile d’installer dismo et ses dépendances là-bas, ce qui n’est pas sûr sur d’autres systèmes.

texte alternatif

mdsumner
la source
1
Cela semble très utile - cependant, je rencontre des problèmes avec la ligne e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))et je reçois un message d'erreur Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]semble bien cependant; des idées sur ce que le problème pourrait être?
djq
Oui, vous avez besoin d'un exemple reproductible
mdsumner
J'essaie de reproduire l'exemple dans cette réponse et cela ne fonctionne pas. x <- geocode('110 George Street, Bathurst, NSW, Australia')retourne ZERO_RESULTSpar exemple, et quand j'utilise un exemple qui retourne un lat / long, la fonctione <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
djq
Il peut y avoir un moyen plus élégant de le faire, mais extentnécessite un vecteur de nombres. Donc ça marche e <- extent(c(x[,4], x[,5], x[,6], x[,7]) + c(-0.001, 0.001, -0.001, 0.001)).
Djq
2
e <- extent(as.numeric(x[4:7]) + c(-0.001, 0.001, -0.001, 0.001))
Cela
11

Aussi pas une astuce, mais voici quelques ressources / exemples que j'ai rassemblés

Exemple de tracé de petites cartes multiples de données surfaciques dans R à l’aide du package de réseau.

Il y a quelques questions sur StackOverflow concernant la cartographie et R, et en voici une avec un bel exemple. Je regarderais les autres réponses et les ressources qu’elles donnent (ainsi que la recherche de quelques exemples supplémentaires) sur SO.

Un lien différent vers le même groupe de r-sig-geo que Brad a déjà donné. Il est très actif et Roger Bivand répond aux questions pratiquement tous les jours sur le groupe. Tous deux liés à la programmation et à l'analyse statistique.

En plus de vérifier la page spatiale cran, je vous suggère également de vérifier spécifiquement la page Spatstat maintenue par Adrian Baddeley. Beaucoup d'exemples, un cours et un prochain livre électronique. (Au moment où je vais à travers le spatstat cours , et je pense qu'il est une introduction beaucoup plus douce que le livre Bivand).

Ce n’est pas une ressource gratuite, mais si vous êtes intéressé par le Rotary, vous devriez consulter le site Web Use R! série de Springer. Vous avez un livre Applied Spatial Data Analysis avec R directement pertinent (le livre A Beginner's Guide to R est également mon livre de R sur l'apprentissage).

Un livre électronique gratuit, Guide pratique de la cartographie géostatistique (Hengl 2009), contient des exemples de géostats appliqués en R, GRASS et Google Earth (KML).

Si je trouve plus de bons exemples, je continuerai à les mettre à jour (j'espère que d'autres personnes posteront également de bons exemples!)

Andy W
la source
Merci Andy. J'aime les exemples de treillis. Totalement d'accord sur Bivand et al. livre - excellente ressource.
Radek
10

Pour l'analyse raster, le package raster est extrêmement puissant. A côté du manuel standard, il y a quelques vignettes pour commencer.

johannes
la source
Pour tout ce que le package raster ne peut pas gérer car il fonctionne avec de la RAM, vous pouvez envisager gdal_Utlis, qui fournit une fonction d'encapsuleur pour utiliser gdal, qui vous permet de traiter des fichiers volumineux.
joaoal
7

Je ne suis pas un utilisateur de PostGIS, mais après avoir suggéré des polygones de Voronoï pour une question sur le voisin le plus proche , j'ai un peu cherché. J'ai trouvé qu'avec R, vous pouvez créer des polygones de Voronoï pour PostGIS . Je suis impressionné.

Kirk Kuykendall
la source
Je suis sûr qu'il existe des moyens plus simples que ce que je vais suggérer, mais vous pouvez créer Tesselations dans le paquetage spatstat, puis convertir cet tessobjet en spobjet à l' aide de cette fonction fournie par Adrian Baddeley. À partir d'un spobjet, vous pouvez l'exporter dans un fichier de formes si vous le souhaitez.
Andy W
5

Je suis tombé sur Spatial-Analyst.net . Très informatif, complet et utile. Plus spécifique à cette question et en ligne avec certaines des réponses précédentes, voir cette page .

Sean Baskin
la source
4

Avec cette fonction, vous pouvez facilement faire des jointures spatiales, mais seulement si toutes les zones sont remplies par des polygones.

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)
José Bustos
la source
3

Exemple d'analyse de modèle de points:

#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) 

Crée un motif de points et le représente. Le progiciel spatstat comporte un certain nombre de fonctions d’analyse de données géographiques. Voici quelques tutoriels sur Spatstat :

Dimitris
la source
1

Je ne suis pas sûr qu'il s'agisse d'un "truc", mais je suis un grand fan de la combinaison du acspackage (pour sélectionner les données du recensement américain) et du leafletpackage (pour créer des cartes javascript interactives pouvant être hébergées en ligne).

Ce tutoriel fait un excellent travail illustrant les avantages de l’utilisation conjointe de ces deux packages.

Tiernan
la source