解决美国城市坐标与州Shapefile坐标系不匹配的绘图问题
解决Shapefile与城市经纬度地图叠加仅显示单个红点的问题
你推测的完全正确——这个问题确实是坐标系不匹配导致的。你的美国州数据已经通过st_transform(32119)转换到了EPSG:32119(北美横轴墨卡托投影,针对美国东部的专属坐标系),但城市数据还是以原始的WGS84经纬度(EPSG:4326)直接用geom_point绘制,两种数据不在同一空间参考系下,就会出现点显示异常的情况。
完整解决步骤:
将城市数据框转换为sf空间对象
首先需要把普通的经纬度数据框转换成sf对象,同时指定原始经纬度对应的坐标系为EPSG:4326(这是GPS/常见经纬度数据的标准坐标系)。注意你的城市数据框里列名是lng和lat,要对应正确:# 将普通数据框转为sf对象,指定原始CRS为4326 us_big_cities_sf = st_as_sf(us_big_cities, coords = c("lng", "lat"), crs = 4326)转换城市数据的坐标系与州数据匹配
把城市sf对象转换为和statesShape相同的EPSG:32119坐标系,确保两者空间参考一致:# 转换到州数据使用的CRS us_big_cities_sf = st_transform(us_big_cities_sf, crs = 32119)使用geom_sf绘制城市点
替换原来的geom_point为geom_sf,它会自动识别sf对象的坐标系信息,实现和州地图的正确叠加:# 绘制叠加地图(可加size参数让红点更醒目) test_plot = ggplot() + geom_sf(data = statesShape) + theme(panel.grid.major = element_line(color = "white")) + geom_sf(data = us_big_cities_sf, color = 'red', size = 2) test_plot
为什么原来的方法不行?
geom_point是基于平面坐标绘制的,不会识别数据的坐标系,直接把经纬度(范围-180到180、-90到90)当成了EPSG:32119的投影坐标(数值范围通常是几十万级别),所以所有点会被缩到一个极小的区域,看起来只有一个红点。geom_sf会自动处理sf对象的坐标系信息,确保不同图层在同一空间参考下对齐展示。
内容的提问来源于stack exchange,提问作者Roelalex1996
相关产品推荐
相关产品推荐

