Я новичок в R и использую растровый пакет. У меня проблема с извлечением полигонов из существующего растрового файла. Если я использую
extract(raster, poly_shape)
Функция на растре всегда создает список с данными. Что я действительно хочу, так это извлечь еще один растровый файл, который я могу снова загрузить с ArcGIS. Прочитав немного больше, я думаю, что функция обрезки - это то, что мне действительно нужно. Но когда я пытаюсь использовать эту функцию
crop(raster, poly_shape)
Я получаю эту ошибку:
Error in .local(x, y, ...) : extents do not overlap
In addition: Warning message:
In intersect(extent(x), extent(y)) : Objects do not overlap
Файлы raster и poly_shape одинаковы для обеих функций. Можете ли вы сказать мне, что здесь может быть не так? Верно ли, что функция кадрирования создает другой растр, а не список?
РЕДАКТИРОВАТЬ : функция экстента () не работает для меня. Я все еще получаю ту же ошибку. Но я уверен, что 2 набора данных перекрываются! С
extract(raster, poly_shape)
Я получаю правильные данные из него. Просто как список, а не как растр, как я хочу его иметь. Я только что загрузил наборы данных в ArcGIS раньше, и они очень хорошо подходят, поэтому я не проверял проекцию. Сейчас попробовал
projection(raster) # "+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs"
projection(poly_shape) # "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs"
и вы можете видеть, что прогнозы не соответствуют. Кажется, что функция извлечения способна автоматически преобразовывать файлы правильным образом. Я знаю это, потому что я сделал следующее:
- Я вырезал точную часть многоугольника, которую я извлек в R также в ArcGIS
- Я рассчитал сумму всех значений извлеченного R полигона (список)
- Я рассчитал сумму всех растровых ячеек, которые я вырезал в ArcGIS
2 имеют точно такой же результат, поэтому я думаю, что следует сделать вывод, что функция извлечения работала правильно. Теперь у меня есть 2 варианта, я думаю:
- Мне нужен способ вытащить растр из извлеченного списка снова или
- 2 набора данных (растр + poly_shape) должны использовать одну и ту же проекцию, и функция обрезки должна работать
Что бы вы предложили сделать здесь?
Ответы:
Функция извлечения ведет себя точно так, как и должна. Вы можете заставить функцию обрезки использовать экстент многоугольника, а затем замаскировать объект, чтобы получить точный растр, представляющий область многоугольника. Если вы продолжаете получать сообщение об ошибке, это означает, что ваши данные фактически не перекрываются.
Пожалуйста, имейте в виду, что R не выполняет проекцию "на лету", поэтому проверьте свои прогнозы. Вы можете проверить, перекрываются ли ваши экстенты, используя функцию "stretch ()".
Вот пример обрезки с использованием экстента многоугольника с последующим маскированием полученного растра с использованием «растеризованного» многоугольника.
источник
spTransform
изsp
пакета (который иногда автоматически загружается с другими пакетами пространственного R) позволяет перепроецировать так, чтобы оба файла были в одной проекции, например.good_poly=spTransform(spolygon, CRSobj=crs(raster_file))
На самом деле я искал
mask()
функцию.mask(raster, poly_shape)
работает без ошибок и возвращает то, что искал.
источник
projection(raster) = projection(poly_shape)
и наоборот ,projection(poly_shape) = projection(raster)
но оба способа производят ту же ошибку:Error in .local(x, y, ...) : extents do not overlap In addition: Warning message: In intersect(extent(x), extent(y)) : Objects do not overlap
. Есть ли способ, как я могу увидеть, какая проекция используется на лету, используя функцию extract () (потому что эта, очевидно, работает)?mask(raster, poly_shape)
работает без ошибок и возвращает то, что искал.Экстент работает просто отлично ... Я думаю, что Xmin, Xmax, Ymin и Ymax вашего экстента отличаются от X и Y вашего растра - т.е. они установлены напротив
источник