Шейп-файлы не накладываются на растровый слой в 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"))
Другие вопросы по тегам