Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何转换地图窗口和数据点的CR以匹配SF对象?_R_Ggplot2_Sf_Proj - Fatal编程技术网

如何转换地图窗口和数据点的CR以匹配SF对象?

如何转换地图窗口和数据点的CR以匹配SF对象?,r,ggplot2,sf,proj,R,Ggplot2,Sf,Proj,我正在尝试创建一张北美太平洋海岸(加拿大南部、美国、下加利福尼亚)地图,以显示站点位置。理想情况下,地图投影将保留海岸线的形状/方向 我正在使用rnaturalearth的国家数据作为我的空间多边形数据框架。我认为该数据的原始投影(EPSG:4326 proj4string:“+proj=longlat+datum=WGS84+no_defs”)看起来不太好,因此我将国家数据转换为Lambert保角圆锥投影(proj4string:+proj=lcc+lat_1=20+lat_2=60+lat_

我正在尝试创建一张北美太平洋海岸(加拿大南部、美国、下加利福尼亚)地图,以显示站点位置。理想情况下,地图投影将保留海岸线的形状/方向

我正在使用
rnaturalearth
国家
数据作为我的
空间多边形数据框架
。我认为该数据的原始投影(EPSG:4326 proj4string:“+proj=longlat+datum=WGS84+no_defs”)看起来不太好,因此我将
国家数据转换为Lambert保角圆锥投影(proj4string:+proj=lcc+lat_1=20+lat_2=60+lat_0=40+lon_0=-96+x_0+y_0=0+datum+no_defs')。我不确定这是不是最好的投影,但我认为这是一个开始,我愿意接受建议

我正在努力绘制转换后的sf,以显示北美洲的太平洋海岸线。我知道我需要转换窗口坐标以匹配LCC北美投影以及我的站点坐标,但是Rstudio给了我一个空白的绘图窗口和错误

我尝试按照[中列出的步骤进行操作,但在多次尝试和尝试其他方法后均未取得任何成功。我在转换地图窗口时出错在哪里?这是我第一次尝试映射转换后的投影。如有任何建议,将不胜感激!提前感谢

library(tidyverse)
library(ggplot2)
library(sf)
library(rnaturalearth) # map data source
library(rgdal)

## Download sf from rnaturalearth
country <- ne_download(scale = 10, type = 'countries', category = 'cultural', returnclass = 'sf')
st_crs(country) # show CRS of data
st_proj_info() # lcc is available

# Lambert Conformal Conic projection proj4 according to https://epsg.io/102009
LCC_North_America <- '+proj=lcc +lat_1=20 +lat_2=60 +lat_0=40 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD83 +units=m +no_defs'
# transform country data to LCC N. America
country_LCC <- st_transform(country, crs = LCC_North_America)

## site locations, need to transform to LCC N.America and plot
lat <- c(48.98604, 47.72322, 37.96389, 33.61817)
long <- c(-122.7593, -122.6559, -122.4881, -117.9052)

disp_wind_4326 <- st_sfc(st_point(c(-127,49)), st_point(c(-112, 29)), crs = 4326)
disp_wind_LCC <- st_transform(disp_wind_4326, crs = LCC_North_America)
disp_window <- st_coordinates(disp_wind_LCC)

(NOOC_coast_fig <- ggplot() +
   geom_sf(data = country_LCC) +
   coord_sf(xlim = disp_window[,'X'], ylim = disp_window[,'Y'],
            datum = LCC_North_America, expand = FALSE) +
   theme_bw())
库(tidyverse)
图书馆(GG2)
图书馆(sf)
图书馆(rnaturalearth)#地图数据源
图书馆(rgdal)
##从rnaturalearth下载sf

country恐怕这是一部经典之作。你的纬度和经度是错误的。纬度和经度是人们通常说的顺序——Y然后X,这对你没有帮助

disp_wind_4326 disp_wind_LCC
为2个特征设置的几何图形(2个几何图形为空)
几何图形类型:点
尺寸:XY
bbox:xmin:NA-ymin:NA-xmax:NA-ymax:NA
epsg(SRID):102009
proj4string:+proj=lcc+lat_1=20+lat_2=60+lat_0=40+lon_0=-96+x_0=0+y_0=0+datum=NAD83+units=m+no_defs
点空
点空
在这一点上,很明显输入有问题,因为它们没有创建有效的几何体。纬度不能在(-90,90)之外,所以它给出了一个空点

从您下面的评论来看,下一个问题相当模糊。您正在将全球数据转换为LCC投影。如果您要绘制整个
国家/地区LCC
数据集,您会发现存在大量失真

特别是,Antartica根本不能很好地应对。这是很常见的:如果你输入的本地投影地理坐标远远超出了它所用于的领域,那么事情可能会严重出错

>st_bbox(国家/地区LCC[国家/地区LCC$ADMIN=='南极洲',]))
xmin-ymin-xmax-ymax
-335167885 -226033419   42202752   22626164 
>st_bbox(国家/地区LCC[国家/地区LCC$ADMIN=='美利坚合众国',]))
xmin-ymin-xmax-ymax
-6653437 -1523147  2124650  4338858 
因此,您的绘图是正确的,但存在一个投影不正的南极多边形,它位于所有其他多边形之上。因此,在进行任何重新投影之前,请将全局数据缩减到感兴趣的区域:


country感谢您指出这一点!我更新了代码,在
disp\u wind\u 4326
中切换了lat/long顺序,这创建了两个带有有效数字的点。生成的
NOOC\u coast\u fig
绘图现在有了一个更好看的窗口,但是
country\u LCC
多多边形仍然没有显示出来。我是否误解了
rnaturalearth
数据集可用于,或者我的代码/投影中还有什么问题吗?请参见上面的更新答案-这是一个投影错误的问题,因此代码和绘图是正确的,但上面有不好的数据。只需注意-很好的可复制示例,但您使用的是最高分辨率的Naturlearth数据集。例如发布问题时,您可以直接下载到真正的低分辨率数据(
scale=110
)——下载和绘图速度更快。