首页 > 解决方案 > 使用R在谷歌地图中定位位置点的问题

问题描述

我在创建地图时遇到问题。我已经下载了一个形状文件——

位置链接:“ https://data.humdata.org/dataset/80920682-bbb5-421e-b7ac-f89b7b640a5c/resource/c545d196-bc2c-44ed-9028-316ab080a41c

压缩文件链接:https ://data.humdata.org/dataset/80920682-bbb5-421e-b7ac-f89b7b640a5c/resource/c545d196-bc2c-44ed-9028-316ab080a41c/download/bgd_poi_healthfacilities_lged.zip

提取数据后,我找到了一个形状文件。我正在尝试使用 R 代码在谷歌地图中绘制这个形状文件。但它没有显示任何东西?

library(maptools)
library(ggmap)

counties.mpl <- readShapePoints("bgd_poi_healthfacilities_lged")

#Coordinates looks like:

counties.mpl@coords

       coords.x1 coords.x2
    0  531533.8   2524464
    1  531004.7   2531410
    2  533228.5   2525061
    3  531723.1   2488972
    4  532347.8   2492098
    5  518104.8   2520361

#map code:
mymap <- get_map(location="Bangladesh", zoom=6)
ggmap(mymap)+
  geom_point(data=counties.mpl@coords, 
             aes(x=counties.mpl@coords[,1], y=counties.mpl@coords[,2]))

有人可以帮我解决这个问题吗?提前致谢。

标签: rggmap

解决方案


正如其他人所指出的,您的 shapefile 使用不同的坐标系,并且您需要将其转换为 lat / lon,然后geom_point()图层才能很好地位于mymap.

您的 shapefile 的 .prj 文件以:

PROJCS["BangladeshTM WGS1984",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984", ...

此处的链接解释了每个部分的含义,但出于我们的目的,您只需要知道 shapefile 的投影坐标系是“BangladeshTM WGS1984”,即孟加拉横轴墨卡托,编码为EPSG:3106

ggmap()预期的典型纬度/经度坐标系是 WGS 84,编码为EPSG:4326

TLDR:将您的数据投影从 EPSG:3106 转换为 EPSG:4326,并相应地绘制。

counties.mpl <- readShapePoints("bgd_poi_healthfacilities_lged")

# define current projection
proj4string(counties.mpl) <- CRS("+init=epsg:3106") # Bangladesh Transverse Mercator system

# remap to lat / long projection
counties.mpl.remapped <- spTransform(counties.mpl, CRS("+init=epsg:4326"))

# extract the coordinates as a data frame.
df <- as.data.frame(counties.mpl.remapped@coords)
colnames(df) <- c("lon", "lat")

# plot results
mymap <- get_map(location="Bangladesh", zoom=6)

ggmap(mymap) +
  geom_point(data = df)

阴谋


推荐阅读