【问题标题】:How to create a KML file using R如何使用 R 创建 KML 文件
【发布时间】:2011-10-18 20:16:49
【问题描述】:

我编写了一个 R 脚本来获取一些地图点数据(纬度和经度值)。我能够在 R 中绘制它们并将它们可视化。但现在我想从这些数据中生成一个 KML 文件并使用 Google 地球查看。这样我就可以与同事分享,他们也可以在 Google 地球上看到它。

执行此操作的最佳方法/包是什么?

【问题讨论】:

    标签: r kml


    【解决方案1】:

    检查rgdal 包中的writeOGR 函数。这是一个简单的例子:

    library("sp")
    library("rgdal")
    data(meuse)
    coordinates(meuse) <- c("x", "y")
    proj4string(meuse) <- CRS("+init=epsg:28992")
    meuse_ll <- spTransform(meuse, CRS("+proj=longlat +datum=WGS84"))
    writeOGR(meuse_ll["zinc"], "meuse.kml", layer="zinc", driver="KML") 
    

    导出的对象是 sp 包中定义的 SpatialPointsDataFrameSpatialLinesDataFrameSpatialPolygonsDataFrame 对象。

    R> class(meuse)
    [1] "SpatialPointsDataFrame"
    attr(,"package")
    [1] "sp"
    

    要使用 KML 驱动程序进行编写,请注意几何图形应位于具有基准 WGS84 的地理坐标中。

    【讨论】:

      【解决方案2】:

      我认为plotKML 包也值得一提。

      但是,为了方便同事之间共享,我发现基于leaflet 包的mapview 包很有趣。可以将地图保存为 HTML 文档,并带有各种背景地图选项;无需 Google 地球,HTML 地图将在您的浏览器上运行。

      一些例子:

      library(sp)
      library(rgdal)
      library(raster)
      library(plotKML)
      library(mapview)
      
      # A SpatialPointsDataFrame example
      data(meuse)
      coordinates(meuse) <- ~x+y
      proj4string(meuse) <- CRS("+init=epsg:28992") # CRS Amersfoort (Netherlands)
      # make a KML file from SpatialPointsDataFrame object
      # will get a warning like "Reprojecting to +proj=longlat +datum=WGS84 ..."
      # as it is expected to work with geographical coordinates with datum=WGS84, 
      # but seems that it takes care of the reprojecting. 
      plotKML::kml(meuse,
                   file.name    = "meuse_cadium.kml",
                   points_names = meuse$cadmium,
                   colour    = "#FF0000",
                   alpha     = 0.6,
                   size      = 1,
                   shape     = "http://maps.google.com/mapfiles/kml/pal2/icon18.png")
      # Or, an easy to make interactive map with mapView()
      mapView(meuse)
      
      # A RasterLayer example   
      data(meuse.grid)
      gridded(meuse.grid) <- ~x+y
      proj4string(meuse.grid) <- CRS("+init=epsg:28992")
      dist_rst <- raster(meuse.grid["dist"])
      # make a KML file from RasterLayer object
      plotKML::kml(dist_rst,
                   file.name    = "dist_rst.kml",
                   colour_scale = SAGA_pal[[1]])
      # Or, easy to make interactive map with mapView() - display raster and add the points
      mapView(dist_rst, legend=TRUE) + meuse
      # However, note that for bigger raster datasets mapView() might reduce from resolution
      

      plotKMLhere 的更多示例,以及here 的教程。对于mapview,可以找到简介here

      【讨论】:

        【解决方案3】:

        如果您愿意跳出 R,有一个名为 DNRGarmin 的免费程序可以将逗号分隔的文件作为 .txt 并将其转换为 .kml 以导入谷歌地球。

        你可以在这里找到它:

        http://www.dnr.state.mn.us/mis/gis/tools/arcview/extensions/DNRGarmin/DNRGarmin.html

        所以在 R 中:

        my.geo.data <- all.my.data[ c("unique.id", "lats", "longs")]
        
        write.csv( my.geo.data, file = "myGeoData.txt")
        

        打开 DNRGarmin,

        文件 -> 加载自 -> 文件 -> myGeoData.txt 然后, 文件 -> 保存到 -> 文件 -> myGeoData.kml

        @rcs 的建议:WGS84 也适用于这个答案。

        祝你好运

        【讨论】:

          【解决方案4】:

          如果您/您的同事了解 QGIS,这是在 Google 地球中显示数据的好方法。 QGIS具有将Google Earth显示为底图的功能,然后您可以打开您的空间数据,它将显示在底图上。当然,正如 rcs 所说,它需要正确投影您的数据。

          这里您需要使用 maptools 包和 Spatial Points 包将点导出为形状文件:

          library(maptools)
          library(sp)
          
          ## define projection
          myProjection <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
          
          ## your points in format dataframe
          coordinates.df <- as.data.frame(MyCoordinates) 
          
          ## the number of points you have as dataframe
          number <- as.data.frame(NumberOfPoints)
          
          ## convert points to Spatial Points Dataframe
          myPoints.spdf <- SpatialPointsDataFrame(coordinates.df, number, proj4string = CRS(myProjection))
          
          ## save shapefile
          writeSpatialShape(myPoints.spdf, "MyPointsName")
          

          您的点现在可以在 QGIS 中打开并显示在 Google 地球中。在 QGIS 中,如有必要,您的数据也可以轻松保存为 kmz 文件。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多