Шейп-файлы не накладываются на растровый слой в R
У меня есть сотни шейп-файлов без системы координат. Моя цель - наложить пространственные полигоны на растровый слой WorldClim. Раньше я без проблем использовал этот подход. Однако на этот раз координаты из моих шейп-файлов для меня странны. Каждая координата для ограничивающего прямоугольника и координат внутри многоугольников состоит из 8-значных чисел без запятой и точки для разделения десятичных знаков. Это ограничивающая рамка одной из фигур:
SHP bbox: xmin:-17367529, xmax:17367529, ymin:-5997367 and ymax:7052489
которые явно отличаются от ограничивающей рамки растрового слоя WorldClim.
WorldClim bbox: xmin=-180,xmax=180,ymin=-60 and ymax=90
Когда я попытался наложить шейп-файл на растровый слой с помощью команды plot, ничего не произошло.
plot(shapefile, add=T)
Я понял, что это проблема проекции. Затем я попытался назначить ту же систему координат растровому слою WorldClim в шейп-файле с помощью функции CRS. Однако результат остается прежним (т.е. шейп-файлы не перекрывают растр). В этой последовательности я попытался использовать функцию spTransform из пакета rgdal для перепроецирования координат шейп-файла. Однако, поскольку шейп-файл не имеет системы отсчета, функция не работает, и я не знаю, как перепроецировать шейп-файл, чтобы он соответствовал растровому слою. В течение нескольких дней я исследовал, как справиться с этой проблемой, и считаю, что отсутствие справочной системы является ключевым моментом проблемы. Однако мне не удается преодолеть эту проблему, и я хотел бы знать, может ли кто-нибудь помочь, как справиться с этой ситуацией.
1 ответ
Сначала вам нужно определить проекцию файлов формы, используя proj4string(meuse)
или crs(shapefile)<-crs string
тогда вы можете использовать spTransform
:
library(rgdal)
data(meuse)
coordinates(meuse) <- c("x", "y")
Здесь у вас есть пространственные данные с x и y, но у вас нет crs
все же! Итак, если вы используетеspTransform
это не удастся.
summary(meuse) #proj4string : [NA] so below line fails!
meuse.utm <- spTransform(meuse, CRS("+proj=utm +zone=32 +datum=WGS84"))
# Error in spTransform(xSP, CRSobj, ...) : # No transformation possible from NA reference system
Чтобы обойти это, как упоминалось выше, вам сначала нужно определить проекцию, как показано ниже:
proj4string(meuse) <- CRS(paste("+init=epsg:28992",
"+towgs84=565.237,50.0087,465.658,-0.406857,0.350733,-1.87035,4.0812"))
summary(meuse) #proj4string : epsg:28992... and then you may use spTransform
а потом:
meuse.utm <- spTransform(meuse, CRS("+proj=utm +zone=32 +datum=WGS84"))