2011-10-18 72 views
7

He escrito una secuencia de comandos R para obtener algunos datos de puntos de mapa (valores de latitud y longitud). Puedo trazarlos en R y visualizarlos. Pero ahora quiero generar un archivo KML a partir de estos datos y verlos usando Google Earth. Para poder compartirlo con mis colegas y ellos también pueden verlo en Google Earth.Cómo crear un archivo KML utilizando R

¿Cuál es el mejor método/paquete para hacer esto?

Respuesta

14

Compruebe la función writeOGR en el paquete rgdal. Aquí es un ejemplo simple:

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

Los objetos exportados son SpatialPointsDataFrame, SpatialLinesDataFrame, o SpatialPolygonsDataFrame objetos como se define en el paquete sp.

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

Para escribir con el conductor KML, tenga en cuenta que las geometrías deben estar en las coordenadas geográficas con datum WGS84.

0

Si está dispuesto a salir de R, hay un programa gratuito llamado DNRGarmin que puede tomar un archivo separado por comas como .txt y convertirlo a .kml para importarlo a google earth.

Se puede encontrar aquí:

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

por lo que en R:

my.geo.data <- all.my.data[ c("unique.id", "lats", "longs")] 

write.csv(my.geo.data, file = "myGeoData.txt") 

DNRGarmin abierta,

Archivo -> Cargar desde -> Archivo -> myGeoData.txt Luego, Archivo -> Guardar en -> Archivo -> myGeoData.kml

@ consejo de rcs sobre: ​​WGS84 también se aplica a esta respuesta.

Buena suerte

0

Si/sus colegas saben QGIS, esta es una muy buena manera de mostrar datos en Google Earth. QGIS tiene la función de mostrar Google Earth como un mapa base y luego puede abrir sus datos espaciales y se mostrarán en el mapa base. Por supuesto, requiere que sus datos se proyecten correctamente como dice el rcs.

Aquí es necesario exportar los puntos como un archivo de formas utilizando el paquete y el paquete MapTools puntos espaciales:

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

Sus puntos se pueden abrir ahora en QGIS y se mostrarán en Google Earth. En QGIS, sus datos también se pueden guardar fácilmente como archivo kmz si es necesario.

2

Creo que vale la pena mencionar el paquete plotKML también.

Sin embargo, para compartir fácilmente entre colegas me pareció interesante el paquete mapview basado en el paquete leaflet. Uno puede guardar un mapa como documento HTML con varias opciones para un mapa de fondo; no necesita Google Earth y el mapa HTML se ejecutará en su navegador.

Algunos ejemplos:

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 

Más ejemplos con plotKMLhere, con un tutorial here. Para mapview, se puede encontrar una introducción here.

Cuestiones relacionadas