Перетворення точкових даних у сітчастий кадр даних для аналізу гістограми за допомогою R?


14

Я дуже новачок у використанні даних ГІС і лише незначний досвід роботи з Р. Я читав про те, як аналізувати просторові дані за допомогою PDF-книги просторового аналізу.net, тому я не повністю втрачений, але думав, що можу описати моя проблема і люди можуть запропонувати ідеї.

У мене є набір даних з приблизно 2000 вимірюваннями за різними координатами / довгими координатами, хоча я, мабуть, поділяю цей набір даних, оскільки дані збиралися протягом 3 років, а умови змінювалися з часом. Назвемо змінну, що вимірюється, "IP".

Я хочу створити карту ІС у всій області, про яку йдеться, за допомогою кригінгу або іншого методу інтерполяції на вибіркових даних. Потім я хочу створити гістограму, яка вимірює кількість землі в різних IP-відрах. Мені також потрібно створити гістограму, яка показує кількість зразків у кожному відрі (зауважте, зразок може мати більш високий або нижчий фактичний IP, ніж те, що передбачає кригінг для його землі).

Я слідую, як завантажувати дані в SpatialPointsDataFrame і запускати аналіз кригінгу, де у мене виникають проблеми, як перетворити ці дані у сітку з даних, щоб я міг зробити аналіз гістограми.

Будь-які пропозиції щодо перетворення точок у сітки?

Відповіді:


12

Ви маєте рацію ... це досить просто! У пакеті "растр" є кілька простих способів вирішення питань створення та маніпулювання растрами.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Ви можете призначити розмір та роздільну здатність сітки різними способами - добре ознайомтеся з документацією на растровий пакет.

Значення растрових комірок з растерізу можна обчислити функцією - «середнє» у наведеному вище прикладі. Не забудьте поставити це: інакше воно просто використовує значення IP з останньої точки, на яку потрапляє!


Від CSV:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)

Гей, це дуже корисно, але як би виглядав код, якби я починав з пунктів у простому CSV з lat / longs, а не з shapefile? Стовпці в CSV будуть IP, Lat, Long, etc, etc., etc., etc.
user1080253

Ви вказували, що ви вже завантажили дані у SpatialPointsDataFrame ..., що саме ptsє в моєму прикладі вище. Просто запустіть код на об’єкті SpatialPointsDataFrame!
Сімбамангу

4
Ця відповідь, хоча і відмінна, схоже, не відповідає тому, що потрібно. (Схоже, пропонується вирішити натомість gis.stackexchange.com/questions/20018 .) Завдання полягає в інтерполяції 2000 або близько точок, а не просто присвоєння їх значень растровим осередкам. Зважаючи на те, що ОП стверджує, що вже "провели аналіз кригінгу", це питання зводиться до вилучення значень растру (скажімо, r) для використання в hist-подобній процедурі, що є просто питанням подібного виразу hist(getValues(r)).
whuber

@whuber - Схоже, що ОП запитує: "де у мене виникають проблеми - як перетворити ці дані в сітку рамки даних, щоб я міг зробити аналіз гістограми ... будь-які пропозиції щодо перетворення точок у сітки" як власне питання, і знає, як створити SpatialPointsDataFrame та запустити крігінг. Але ви маєте рацію, здається, це дублікат 20018 (за винятком сітки введення).
Сімбамангу

Вибачення, @ user1080253 ... Я читаю "сітку" як "растрову", що невірно і не корисно для кригінгу; див. тут для кращої ідеї створення звичайної сітки та інтерполяції даних у цю сітку.
Simbamangu

3

Пакет plotKML має функцію під назвою vect2rast. Ця функція в основному розширює rasterizeфункцію, доступну в растровому пакеті. Перевага vect2rast; однак, це те, що він не потребує введення з боку користувача, тобто він автоматично визначає розмір комірки сітки та обмежувальне поле на основі властивостей набору вхідних даних. Розмір комірки сітки оцінюється виходячи з щільності / розміру функцій на карті ( nndistфункція в пакеті spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.