代码之家  ›  专栏  ›  技术社区  ›  Rudro88

用R定位google地图中的定位点问题

  •  0
  • Rudro88  · 技术社区  · 7 年前

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

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

    在提取数据之后,我找到了一个形状文件。我试图用R代码在google地图中绘制这个形状文件。但它什么也没表现出来?

    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]))
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Z.Lin    7 年前

    正如其他人所注意到的,shapefile使用不同的坐标系,&在 geom_point() mymap .

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

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

    典型的lat/lon坐标系 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)
    

    plot