преобразовать полярную стереографическую проекцию в длинную сетку широты в R

У меня есть полярная стереографическая сетка (размеры 6667 x 6667 ячеек, эксенты сверху: 3333500, слева: -3333500, справа: 3333500, снизу: -3333500). Проекция имеет широту истинного масштаба -71 градус южной широты, датум WGS84. Шаг сетки 1000 м

Я хотел бы сделать из этого длинную сетку, но у меня проблемы. Я могу говорить об этом совершенно неправильно, но вот что у меня есть до сих пор:

library(rgdal)
x<-seq(-3333500,3333500, length.out=6667)
y<-seq(3333500,-3333500,length.out=6667)
a<-data.frame(x,y)
coordinates(a)= ~x + y

stere <- "+proj=stere +lat_ts=-71 +datum=WGS84 +units=m"
#i have also tried:
#stere <- "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84  "
proj4string(a)<-CRS(stere) 
spTransform(a,CRS("+proj=longlat +datum=WGS84")) 

Вывод из spTransform неверен. У кого-нибудь есть предложения? Спасибо!


person Megan    schedule 23.05.2014    source источник
comment
разве единицы не должны быть метрами?   -  person yosukesabai    schedule 24.05.2014
comment
да, извините, опечатка @yosukesabai, все еще не работает   -  person Megan    schedule 24.05.2014
comment
Вы нашли что-то близкое к вашим потребностям? Ваша сетка огромна с миллионами ячеек, с которыми может быть сложно работать и даже представлять (сопоставлять) ее. Вместо этого лучше работать с растровыми слоями.   -  person Paulo E. Cardoso    schedule 24.05.2014


Ответы (2)


Будет ли это чем-то помочь?

#Load packages

kpacks <- c("rgdal", 'ggplot2', 'maptools', 'raster')
new.packs <- kpacks[!(kpacks %in% installed.packages()[ ,"Package"])]
if(length(new.packs)) install.packages(new.packs)
lapply(kpacks, require, character.only=T)
remove(kpacks, new.packs)

#Your GRID limits

x<-seq(-3333500,-3333000, length.out=10)
y<-seq(-3333000,-3333500,length.out=10)
xy <- as.data.frame(expand.grid(x,y))
coordinates(xy)= ~Var1 + Var2
plot(xy, axes = T)

epsg 3031

proj.pol <- CRS('+init=epsg:3031')
wgs <- CRS('+init=epsg:4326')
proj4string(xy) <- proj.pol
awgs <- spTransform(xy, wgs)
head(awgs)
SpatialPoints:
          Var1      Var2
[1,] -134.9957 -48.46152
[2,] -134.9962 -48.46184
[3,] -134.9967 -48.46216
[4,] -134.9971 -48.46248
[5,] -134.9976 -48.46280
[6,] -134.9981 -48.46311
Coordinate Reference System (CRS) arguments: +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs
+ellps=WGS84 +towgs84=0,0,0

plot(awgs)

wgs84

И более правдоподобный пример

data(wrld_simpl)
maps <- wrld_simpl[wrld_simpl$NAME %in% c("Argentina", "Chile",
                                          "Brazil",  "Antarctica"), ]
mapsdf <- fortify(maps)
x<-seq(-3433000,3433000, length.out=10)
y<-seq(3433000,-3433000,length.out=10)
xy <- as.data.frame(expand.grid(x,y))
coordinates(xy)= ~Var1 + Var2
proj4string(xy) <- proj.pol
awgs <- spTransform(xy, wgs)
#plot(awgs, axes = T)
awgsdf <- as.data.frame(awgs)

ggplot(maps) +
  geom_path(aes(x=long, y= lat, group = group)) +
  geom_point(data = awgsdf, aes(x=x, y=y)) +
  #coord_polar()
  coord_map("ortho", orientation=c(-40, -20, 10))

ggmap

ИЗМЕНИТЬ

Дополнительную информацию о EPSG:3031 WGS 84 / Antarctic Polar Stereographic можно найти на сайте NCIDC или remotesensing.org

ДОБАВИТЬ Сетку обрезки до экстента Вы можете определить интересующую область, чтобы соответствующим образом обрезать сетку.

x<-seq(-12400000, 12400000, length.out=50)
y<-seq(-12400000, 12400000,length.out=50)
xy <- as.data.frame(expand.grid(x,y))
coordinates(xy)= ~Var1 + Var2
proj4string(xy) <- proj.pol
awgs <- spTransform(xy, wgs)
plot(awgs, axes = T)

# Create a extent object using raster::extent
ext1 <- extent(matrix(c(-60, 60, -86, -40), byrow = T, nrow=2))
awgs1 <- crop(awgs, ext1) # crop spdf to extent
# Plot it
ggplot(maps) +
  geom_polygon(aes(x=long, y= lat, group = group)) +
  geom_point(data = as.data.frame(coordinates(awgs)),
             aes(x=Var1, y=Var2), size = 1, colour = 'grey60') +
  geom_point(data = as.data.frame(coordinates(awgs1)),
             aes(x=Var1, y=Var2)) +
  #coord_polar()
  coord_map("ortho", orientation=c(-60, -20, 10)) +
  theme_bw()

введите здесь описание изображения

person Paulo E. Cardoso    schedule 23.05.2014
comment
Прохладный. Есть список всех стандартных проекций EPSG. Я вижу, что могу изменить URL-адрес на сайте NCIDC, но я не нашел их списка или указателя. - person MrFlick; 24.05.2014
comment
Спасибо @PauloCardoso, это было полезно. Есть ли простой способ подмножить мою большую сетку по конкретным координатам широты? - person Megan; 27.05.2014
comment
@Меган, конечно, по координатам или ограничивающим рамкам, например. Ваша сетка слишком велика для отображения и некоторых манипуляций. Что именно вам нужно сделать? - person Paulo E. Cardoso; 27.05.2014
comment
@PauloCardoso, я хочу вырезать небольшую коробку из более крупной сетки, используя координаты 4 широты или любой другой способ, который проще всего. Я работаю на суперкомпьютере, поэтому манипуляции/отображение не проблема. - person Megan; 27.05.2014
comment
@PauloCardoso, если быть более конкретным, я хочу построить карту этого маленького поля, а затем в меньшем поле у ​​меня есть список широт, которые я хочу сопоставить с сеткой, и вытащить соответствующие данные. - person Megan; 27.05.2014
comment
@Megan Сколько времени вам потребуется, чтобы создать расширенную сетку с координатами 6667x6667 и отобразить ggplot? Ты пробовал? Идея состоит в том, чтобы иметь общее правило для подмножества области или для определенного поля? - person Paulo E. Cardoso; 28.05.2014
comment
@PauloCardoso, это заняло около 10 минут. Обычно я не использую ggplot, поэтому кодирование для меня немного чуждо. Мне интересно, не будет ли проще переключить проекцию с полярной стереографической на меркаторскую, и тогда подмножество по широте может быть более простым? - person Megan; 28.05.2014
comment
@Меган Все возможно! Это просто вопрос замены кодов EPSG, в данном конкретном случае замените 3031 на нужный меркатор (я не уверен, что здесь подходит). Мне нужно подумать. - person Paulo E. Cardoso; 28.05.2014

Глядя на эту страницу документации, кажется, что для +proj=stere требуются как +lat_0, так и +lon_0 параметр. С использованием

stere <- "+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +datum=WGS84 +units=m"

похоже, он сделал преобразование (по крайней мере, у него были ненулевые значения).

proj4string(a)<-CRS(stere) 
z<-spTransform(a,CRS("+proj=longlat +datum=WGS84")) 
summary(z)
# Object of class SpatialPointsDataFrame
# Coordinates:
#   min       max
# x -45 135.00000
# y -90 -48.45867
# Is projected: FALSE 
# proj4string :
# [+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0]
# Number of points: 6667
person MrFlick    schedule 23.05.2014