Используя пакет raster
, у меня есть два набора данных, один растровый ASCII и один шейп-файл ESRI. Я хочу извлечь данные растра (температуры воды) в полную длину шейп-файла, который является береговой линией озера.R - пакет «растровый» - RasterLayer («растр») не извлекается в SpatialPolygonsDataFrame («sp»); Просто возвращает объект NULL
Форм-файл ESRI обрабатывается как SpatialPolygonsDataFrame
при чтении с использованием функции shapefile()
.
shapefile <- shapefile("shore.shp",verbose=TRUE)
Я использовал функцию raster()
для чтения в ASCII растра.
raster <- raster("1995_001.asc",native=TRUE,crs="+proj=merc +datum=WGS84 +ellps=WGS84 +units=m")
Координата справочной информации для шейпа является:
+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0
То растра (т.е. принуждаемой к следующему с помощью crs
аргумента в функции raster()
):
+proj=merc +datum=WGS84 +ellps=WGS84 +units=m +towgs84=0,0,0
Затем я использовал функцию spTransform()
в пакете rgdal
, чтобы обеспечить пространственную привязку шейп-файла к пространству растра.
spTransform(shapefile, CRS(projection(raster)))
Наконец, я представил следующее:
extract(raster,shapefile,method="simple",fun=mean,small=TRUE,na.rm=TRUE,df=FALSE)
Однако extract()
просто возвращает NULL
объект list
типа. Я предполагаю, что этот вопрос подтверждается явным принуждением ссылок на координаты.
Кроме того, здесь приведены результаты использования функции show()
на каждом наборе:
> show(raster) class : RasterLayer dimensions : 1024, 1024, 1048576 (nrow, ncol, ncell) resolution : 1800, 1800 (x, y) extent : -10288022, -8444822, 4675974, 6519174 (xmin, xmax, ymin, ymax) coord. ref. : NA data source : in memory names : layer values : -9999, 8.97 (min, max)
> show(shapefile) class : SpatialPolygonsDataFrame features : 1 extent : 597568.5, 998261.6, 278635.3, 668182.2 (xmin, xmax, ymin, ymax) coord. ref. : +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs +ellps=GRS80 +towgs84=0,0,0 variables : 3 names : AREA, PERIMETER, HECTARES min values : 59682523455.695, 5543510.075, 5968252.346 max values : 59682523455.695, 5543510.075, 5968252.346
Я искал множество подобных вопросов на этих форумах, не имеющих разрешения. Может ли кто-нибудь дать мне (виртуальную) руку?
спасибо, что заранее.
Благодарим вас за ответ. Вы правы в том, что два набора данных не пересекаются пространственно. Я применил каждое из ваших предложений, но с тем же результатом, что и раньше. Оказалось, что растровое изображение ASCII не имеет системы координат, определенной при считывании и просмотре «шоу (растра)». Как я могу определить систему координат и проекцию для «растра» и «шейп-файла» в R, чтобы они перекрывались в пространстве? – Andrew
Я знаю, что файл ASCII не хранит информацию о CRS (это очень плохой формат файла во многих отношениях). Если вы можете показать нам «show (растр)», то мы можем по крайней мере оценить, является ли «crs =» + proj = merc + datum = WGS84' правдоподобным (если вы не знаете это для * sure *). Я бы предложил вам отредактировать ваш вопрос, а также включить 'show (shapefile)' – RobertH
См. отредактированный вопрос для вывода из show(). – Andrew