我正在处理一些国家的分区的shapefiles,对于一个国家(冰岛),X和Y坐标似乎在shapefile中被交换。
数据可以在这里下载:shapefile数据;IS_50V:mork_kjordaemi是相关的数据集,在下载下拉菜单中选择“download”选项。我一直在使用R中的"sf“包来完成所有的shapefile工作,并且它对我拥有的所有其他shapefile数据都做得很完美。
library(sf)
ic_2003 <- downloaded_data
st_crs(ic_2003)给了我
Coordinate Reference System:
User input: ISN2016
wkt:
GEOGCRS["ISN2016",
DATUM["Islands Net 2016",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["unknown"],
AREA["Iceland"],
BBOX[59.96,-30.87,69.59,-5.55]],
ID["EPSG",8086]]head(ic_2003)给了我
Simple feature collection with 6 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 63.29577 ymin: -24.53268 xmax: 66.56644 ymax: -13.49462
Geodetic CRS: ISN2016我试过ic_2003 <- st_transform(ic_2003, 4326),但这不能解决问题。
我也尝试过ic_2003 <- st_transform(ic_2003, pipeline = "+proj=pipeline +step +proj=axisswap +order=2,1"),就像这里一样,但是这也不能解决这个问题。
如果我把数据绘制出来
ggplot(ic_2003) +
geom_sf() +
coord_sf() 我得到了正确的形状,但旋转了90度,在世界地图上的错误位置。
如果你能给我任何帮助,我将不胜感激。
发布于 2021-07-15 15:29:31
必须有一种简单的sf方法,但是您也可以使用purrr::modify (它的工作方式类似于map)来交换所有的几何学lat/lon列(列表中的一个列表中的一个矩阵),而不需要更改sf属性.
library(sf)
library(tidyverse)
ic_2003 <- st_read("mork_kjordaemiPolygon.shp") #from link above
ic_2003 <- ic_2003 %>%
mutate(geometry = modify(geometry, modify, ~list(.[[1]][,c(2,1)])))
ggplot(ic_2003) +
geom_sf() +
coord_sf()

https://stackoverflow.com/questions/68395283
复制相似问题