Какой самый полезный пространственный трюк R?


44

R становится довольно сильным инструментом для обработки и анализа пространственных данных. Я узнал некоторые полезные вещи через вопросы , как это на SO и думал , что это может быть полезно иметь что - то simmilar, но более «пространственно» ориентированным.

Можете ли вы поделиться некоторыми полезными советами и рекомендациями по пространственному R?


5
сообщество вики?
— 2010 года


извед. Спасибо. Я думаю, что видел это, но это легко забыть.
— 2010 года

3
Также: rspatialtips.org.uk
— radek

Я думаю, что это должна быть вики сообщества, так как это стало своего рода списком.
— РК

Ответы:


38

Это не столько хитрость, сколько spplot()изящная встроенная функциональность. spplot()Способность масштабировать образцы легенды (чтобы соответствовать диапазонам разрывов классификации) служит полезным педагогическим инструментом при обсуждении распределения данных атрибутов и типов классификации. Объединение кумулятивных графиков распределения с картами помогает в этом деле.

введите описание изображения здесь введите описание изображения здесь

Студентам нужно всего лишь изменить несколько параметров сценария, чтобы изучить типы классификации и эффекты преобразования данных. Как правило, это их первый набег в R в основном ориентированном на ArcGIS курсе.

Вот фрагмент кода:

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 (Р. Биванд, Э. Пебесма и В. Гомес-Рубио)


1
очень круто! Это выглядит очень полезным.
— DJN

2
PolyGeo отстой в качестве модератора
— ниже радара

28

РЕДАКТИРОВАТЬ: обратите внимание, что это больше не работает 2018-10-24, из-за новых требований к источникам карты Google.

Я был очень рад найти пакет с демонстрацией геокодирования и загрузкой карт Google:

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)

То есть в R 2.12.0 для Windows, установить диско и его зависимости тривиально, но не обязательно в других системах.

альтернативный текст


1
Это выглядит очень полезно - однако у меня возникают проблемы со строкой e <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001))объявления, и я получаю сообщение об ошибке Error: c("x", "y") %in% names(x) is not all TRUE. x[4:7]кажется, хорошо, хотя; есть мысли о том, в чем может быть проблема?
— DJN

Да, вам нужен воспроизводимый пример
— mdsumner

Я пытаюсь воспроизвести пример в этом ответе, и он не работает. x <- geocode('110 George Street, Bathurst, NSW, Australia')возвращает, ZERO_RESULTSнапример, и когда я использую пример, который возвращает lat / long, функцияe <- extent(x[4:7] + c(-0.001, 0.001, -0.001, 0.001)) also fails.
— djq

Может быть более элегантный способ сделать это, но extentтребуется вектор чисел. Так что это работает 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))
— snth


11

Тоже не хитрость, но вот некоторые ресурсы / примеры, которые я собрал

Пример построения небольших множественных карт данных Areal в R с использованием пакета решеток.

В StackOverflow есть несколько вопросов о отображении и R, и вот один из них с хорошим примером. Я бы посмотрел на другие ответы и ресурсы, которые они дают (а также поищу еще несколько примеров) на SO.

Другая ссылка на ту же группу r-sig-geo, которую Брэд уже дал. Это очень активно, и Роджер Биванд отвечает на вопросы практически каждый день в группе. Оба связаны с программированием и статистическим анализом.

Помимо проверки пространственной страницы крана, я бы также предложил специально проверить страницу Spatstat, поддерживаемую Адрианом Бадделей. Множество примеров, курс и будущая электронная книга. (В настоящее время я проходил курс spatstat , и я думаю, что это намного более мягкое введение, чем книга Биванда).

Не бесплатный ресурс, но для всех, кто интересуется RI, предложил бы вам воспользоваться Use R! серия от Springer. У меня есть книга « Прикладной анализ пространственных данных с непосредственным подходом к R» (также книга «Руководство для начинающих по R» - моя книга по изучению R.)

В бесплатной электронной книге «Практическое руководство по геостатистическому картированию» (Hengl 2009) приведены примеры применения геостатов в R, GRASS и Google Earth (KML).

Если я найду больше хороших примеров, я буду продолжать обновлять (я надеюсь, что другие люди также публикуют хорошие примеры!)


Спасибо Энди. Мне нравится пример решетки. Полностью согласен с Bivand et al. Книга - отличный ресурс.
— Радек

10

Для растрового анализа растровый пакет является чрезвычайно мощным. Помимо стандартного руководства, есть несколько виньеток для начала.


Для всего, что растровый пакет не может обработать, потому что он работает с оперативной памятью, вы можете рассмотреть gdal_Utlis, который предоставляет функцию-оболочку для использования gdal, позволяющую обрабатывать большие файлы.
— joaoal

7

Я не пользователь PostGIS, но, предложив полигоны Вороного для вопроса о ближайшем соседе , я немного поискал. Я обнаружил, что с помощью R вы можете создавать полигоны Вороного для PostGIS . Я впечатлен.


Я уверен, что есть более простые способы, чем то, что я собираюсь предложить, но вы можете создать Tesselations в пакете spatstat, а затем преобразовать этот tessобъект в spобъект, используя эту функцию, предоставленную Адрианом Бадделей. Из spобъекта вы можете экспортировать его в шейп-файл, если хотите.
— Энди W

5

Я наткнулся на Spatial-Analyst.net . Очень информативно, всесторонне и полезно. Более конкретно на этот вопрос и в соответствии с некоторыми из предыдущих ответов, смотрите эту страницу .



4

С помощью этой функции вы можете легко создавать пространственные объединения, но только если все области заполнены полигонами.

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

Пример анализа паттернов Point:

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

Создает точечный узор и изображает его. Пакет spatstat имеет ряд функций для анализа географических данных. Вот несколько учебных пособий по spatstat :


1

Не уверен, что это квалифицируется как «уловка», но я большой поклонник комбинации acsпакета (для выбора данных переписи США) и leafletпакета (для создания интерактивных карт javascript, которые могут быть размещены в Интернете).

Этот урок отлично справляется, иллюстрируя преимущества совместного использования этих двух пакетов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.