r - 空间投影问题 - 未知数据 GRS1980
问题描述
我有两个来自不同来源但应该代表同一个多边形的 sf 对象。然而,在绘制它们时,它们显然看起来相互偏移:
重新投影对象似乎并不能解决问题,我想知道这是否是由于其中一个对象具有“基于 GRS 1980 的未知数据”。
st_crs(sf1)
Coordinate Reference System:
User input: NAD83
wkt:
GEOGCRS["NAD83",
DATUM["North American Datum 1983",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]], [...]
st_crs(sf2)
Coordinate Reference System:
User input: Unknown datum based upon the GRS 1980 ellipsoid
wkt:
GEOGCRS["Unknown datum based upon the GRS 1980 ellipsoid",
DATUM["Not specified (based on GRS 1980 ellipsoid)",
ELLIPSOID["GRS 1980",6378137,298.257222101,
LENGTHUNIT["metre",1]]], [...]
如果是这样,有什么方法可以识别基准并确保多边形正确排列?
用 sf 对象表示:
download.file(destfile = "sf1.rds","https://github.com/JoakimWeill/projection_issue_reprex/raw/master/sf1.rds")
download.file(destfile = "sf2.rds","https://github.com/JoakimWeill/projection_issue_reprex/raw/master/sf2.rds")
sf1 <- readRDS("sf1.rds")
sf2 <- readRDS("sf2.rds")
ggplot() +
geom_sf(data = sf1, fill = "red", alpha = .5) +
geom_sf(data = sf2, fill = "blue", alpha = .5)
sf1 <- st_transform(sf1, st_crs(sf2))
ggplot() +
geom_sf(data = sf1, fill = "red", alpha = .5) +
geom_sf(data = sf2, fill = "blue", alpha = .5)
解决方案
也许您需要定义投影而不是转换投影。例如,尝试将未知数据的基准定义为 NAD83,并查看它们是否对齐。如果不是,请尝试将其定义为 NAD27,转换为 NAD83,然后查看它是否有效。您需要先告诉它正确的起点,然后才能将其转换为其他内容。我的猜测是 NAD83 或 NAD27 而不是 WGS84,因为椭圆体,以及它是如何移动的。https://www.esri.com/arcgis-blog/products/arcgis-desktop/mapping/wgs84-vs-nad83/
推荐阅读
- python - 由于反复更改 sha256,pip install 失败(错误:这些包与需求文件中的哈希不匹配)
- charts - Chart的PUG渲染
- php - 将文件从本地网站上传到 Blob 存储
- python - PIL 将文本添加到 gif 帧会为图片添加噪点
- java - 如何检查时间 SIMpleDateFormat?
- css - 在图像上制作完美的圆形
- javascript - 如何在 React 中为每个用户输入文本?
- c# - ActiveMQ 连接的消费者不消费消息
- reactjs - 页面刷新时丢失上下文
- python - 引发 AttributeError:响应内容不是文本 Scarpy 代理池。怎么解决?