ggplot 可以在数据集中找到 lng 和 lat,但传单不能,“需要 '+proj=longlat +datum=WGS84'”

问题描述 投票:0回答:1

我有一个来自公共存储库的数据集https://github.com/highsource/verbundkarte

使用 st_read 读取数据集并使用 ggplot 绘制它会产生一个带有正确 lng 和 lat 数据的漂亮地图。

df <- st_read("~/Verkehrsverbunde.shp")

map <- ggplot(df) + geom_sf(aes(fill=SHORTNAME))

因此,我假设 lng/lat 值包含在变量 df$geometry 中。但是,如果我使用传单,无论我尝试什么,最终都会出错。比如说

df%>% leaflet() %>%
  addProviderTiles("CartoDB") %>%
  addPolygons(label = htmlEscape(verbunddaten$SHORTNAME)) %>%
  setView(lng = 10.3, lat = 51.9, zoom = 5.1)

最终

Warning messages:
1: sf layer is not long-lat data 
2: sf layer has inconsistent datum (+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +datum=potsdam +units=m +no_defs ).
Need '+proj=longlat +datum=WGS84' 

我发现了这个美丽的对话,但我基本上一无所知。按照here的建议使用 readOGR 读取数据并不能解决我的问题。

如何强制传单采用与 ggplot 相同的 longlat 和 EPSG?

r ggplot2 shapefile r-leaflet
1个回答
0
投票

Verkehrsverbunde.shp
shapefile 中的数据位于自定义的 traverse Mercator 投影中,其中坐标以米表示。相比之下,r-leaflet 期望数据以经纬度表示,如果/绘制时,它看起来像一个等距矩形投影

我猜,与您的看法相反,

ggplot

不使用以度为单位的纬度和经度,而是使用以米为单位的
北距东距值。对于小区域,数据的表示可能看起来相似。

在 GIS 术语中,您的数据使用

EPSG:31467 CRS(坐标参考系),可以通过 proj=tmerc

datum=postdam
 推断; r-leaflet 期望 
EPSG:4326 CRS 中的数据。

此处的方法是重新投影数据,以便坐标符合预期的经纬度。有很多方法可以做到这一点;在命令行上运行

ogr2ogr -t_srs epsg:4326 Verkehrsverbunde-latlng.shp Verkehrsverbunde-latlng.shp

使用 R,或 使用 QGIS,以及其他方法。

© www.soinside.com 2019 - 2024. All rights reserved.