Який найкорисніший просторовий трюк R?


44

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

Чи можете ви поділитися декількома просторовими підказками та рекомендаціями, які вважаєтесь корисними?


5
Вікі спільноти?
relet


ак. Дякую. Я вважаю, що бачив це, але це легко забути.
relet

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
дуже круто! Це виглядає дуже корисно.
djq

2
PolyGeo виступає як модератор
Нижче за Радар

28

EDIT: зауважте, це більше не працює 2018-10-24, через нові вимоги до джерел google map.

Я був дуже радий, що знайшов пакунок dismo з завантаженням геокодування та 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)

Тобто в R 2.12.0 для Windows, встановити dismo та його залежність там неважливо, не впевнені в інших системах.

alt текст


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]здається прекрасним, хоча; якісь думки щодо проблеми, яка може бути?
djq

Так, вам потрібен відтворювальний приклад
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, яку Бред вже дав. Це дуже активно, і Роджер Біванд практично щодня відповідає на питання групи. Обидва стосувалися програмування та статистичного аналізу.

Окрім перевірки просторової сторінки cran, я також пропоную спеціально перевірити сторінку Spatstat, яку підтримує Адріан Баддлі. Безліч прикладів, курсу та майбутньої електронної книги. (На даний момент я проходжу курс спазстата , і думаю, що це набагато ніжніший вступ, ніж книга Біванда).

Не безкоштовний ресурс, але для всіх, хто цікавиться RI, ми б запропонували вам перевірити Use R! серія Спрингера. У мене є книга " Прикладний аналіз просторових даних" з R, що безпосередньо стосується (також книга "Посібник для початківців по R" - це моя запропонована книга з вивчення R.)

Безкоштовна електронна книга, Практичний посібник з геостатистичного картографування (Hengl 2009), містить приклади застосованих геостатів у R, GRASS та Google Earth (KML).

Якщо я знайду більше хороших прикладів, я продовжуватиму оновлювати (сподіваюся, що й інші публікують хороші приклади!)


Дякую Енді. Мені подобається гратчастий приклад. Повна згода на Bivand та ін. книга - чудовий ресурс.
radek

10

Для растрового аналізу растровий пакет надзвичайно потужний. Поряд із стандартним посібником є ​​кілька віньєток для початку роботи.


З усього, з чим не може впоратися растровий пакет, оскільки він працює з оперативною пам'яттю, ви можете розглянути gdal_Utlis, який забезпечує функцію обгортки для використання gdal, що дозволяє обробляти великі файли.
joaoal

7

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


Я впевнений, що існують простіші способи, ніж те, що я збираюся запропонувати, але ви можете створити Tesselations в пакеті spatstat, а потім перетворити цей tessоб’єкт в spоб'єкт, використовуючи цю функцію, яку надає Адріан Бадделі. З spоб’єкта ви можете експортувати його у файл форми, якщо хочете.
Енді Ш

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

Приклад аналізу точкових моделей:

#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 має ряд функцій для аналізу географічних даних. Ось декілька навчальних посібників зі спазстатом :


1

Не впевнений, чи це кваліфікується як "трюк", але я великий шанувальник комбінації acsпакету (для вибору даних перепису США) та leafletпакету (для створення інтерактивних javascript-карт, які можна розмістити в Інтернеті).

Цей підручник виконує відмінну роботу, ілюструючи перевагу використання цих двох пакетів разом.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.