У меня есть несколько шейп-файлов в разных CRS (в основном WGS84 lat / lon), которые я хотел бы преобразовать в общую проекцию (вероятно, коническую равную площадь Альберса, но я могу попросить помощи при выборе другого вопроса, как только моя проблема станет лучше) -определенный).
Я провел несколько месяцев, занимаясь пространственной статистикой в R, но это было 5 лет назад. Что касается меня, я не могу вспомнить, как преобразовать sp
объект (например SpatialPolygonsDataFrame
) из одной проекции в другую.
Пример кода:
P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry"), verbose=TRUE, proj4string=P4S.latlon)
# Shapefile available at
# http://www.dartmouthatlas.org/downloads/geography/hrr_bdry.zip
# but you must rename all the filenames to have the same
# capitalization for it to work in R
Теперь у меня есть SpatialPolygonsDataFrame
соответствующая информация о проекции, но я хотел бы преобразовать ее в желаемую проекцию. Я вспоминаю, что для этого была функция с некоторым неинтуитивным названием, но я не могу вспомнить, что это такое.
Обратите внимание, что я хочу не просто изменить CRS, а изменить координаты для соответствия («перепроектировать», «преобразовать» и т. Д.).
редактировать
За исключением AK / HI, которые досадно размещены в Мексике для этого шейп-файла:
library(taRifx.geo)
hrr.shp <-
subset(hrr.shp, !(grepl( "AK-" , hrr.shp@data$HRRCITY ) |
grepl( "HI-" , hrr.shp@data$HRRCITY )) )
proj4string(hrr.shp) <- P4S.latlon
источник
Ответы:
Вы можете использовать
spTransform()
методы в rgdal - используя ваш пример, вы можете преобразовать объект в NAD83 для Канзаса (26978):Чтобы сохранить его в новой проекции:
РЕДАКТИРОВАТЬ : Или, согласно предложению @ Spacedman (который записывает файл .prj с информацией CRS):
Если вы не уверены, с какого CRS проектировать, обратитесь к следующему сообщению:
И если кто-то хочет определить / назначить CRS, когда у данных его нет, обратитесь к:
источник
С момента появления sf-пакета (посмотрите виньетки sf1 , sf2 , sf3 , sf4 и руководство по миграции здесь ) вы можете использовать
st_transform()
для перепроецирования ваших векторных данных:sf заменит sp в будущем и благодаря своей простоте и скорости имеет несколько преимуществ по сравнению с sp.
источник