Преобразование точечных данных в сеточный фрейм данных для анализа гистограммы с использованием R?


14

Я очень новичок в использовании данных ГИС и немного скромно знаком с R. Я читал о том, как анализировать пространственные данные с помощью PDF-книги пространственного-analyst.net, так что я не совсем потерян, но я думал, что смогу моя проблема и люди могут предложить идеи.

У меня есть набор данных с примерно 2000 измерениями в разных широтных / длинных координатах, хотя я, вероятно, подразделяю этот набор данных, поскольку данные были собраны за 3 года, а условия менялись со временем. Давайте назовем измеряемую переменную «IP».

Я хочу создать карту 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 с широтой / долготой, а не с шейп-файлом? Столбцы в CSV будут IP, Lat, Long и т. Д. И т. Д. И т. Д.
user1080253

Вы указали, что вы уже загрузили данные в SpatialPointsDataFrame ... это именно то, что ptsв моем примере выше. Просто запустите код для вашего объекта SpatialPointsDataFrame!
Симбамангу

4
Этот ответ, хотя и превосходный, похоже, не касается того, что необходимо. (Похоже, что вместо этого предлагается решение для gis.stackexchange.com/questions/20018 .) Задача состоит в том, чтобы интерполировать около 2000 точек, а не просто присваивать их значения растровым ячейкам. Учитывая, что OP уже заявляет, что уже «провел анализ кригинга», этот вопрос сводится к извлечению значений растра (скажем, r) для использования в histподобной процедуре, что является просто вопросом выражения типа hist(getValues(r)).
whuber

@whuber - Похоже, что OP спрашивает: «где у меня проблемы, это как преобразовать эти данные в сеточный фрейм данных, чтобы я мог выполнить анализ гистограммы ... любые предложения по преобразованию точек в сетки» как актуальный вопрос, и знает, как сделать SpatialPointsDataFrame и запустить кригинг. Но вы правы, похоже, это дубликат 20018 (за исключением ввода с сеткой).
Симбамангу

Извинения, @ user1080253 ... Я читаю 'grid' как 'растр', что неправильно, и не полезно для кригинга; см. здесь для лучшей идеи о создании регулярной сетки и интерполяции ваших данных в эту сетку.
Симбамангу

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.