在R中使用plotKML时如何调整点的大小

时间:2015-05-06 02:17:57

标签: r kml

我想使用plotKML包在GoogleEarth中显示SpatialPointsDataFrame对象。当我只是传递我想要绘制的sp对象时,它工作正常,但试图猜测我想要的图标的颜色和大小。当我查看plotKML的文档时,它指定如果S4签名是SpatialPointsDataFrame,那么我可以传递颜色和大小的值。但是每次我尝试这个时都会出现以下错误:

Error in `[.data.frame`(obj@data, , deparse(size)) : 
  undefined columns selected

以下是将重现此错误的示例代码块。

library(sp)
library(plotKML)

data(bigfoot) 

bigfoot = head(bigfoot)

coordinates(bigfoot) <- c('Lon','Lat') 
proj4string(bigfoot) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") 

plotKML(bigfoot, size = 1)

顺便说一句,我看了一下源代码并认为可能有所帮助。源代码中的相关代码块(plotKML.sp.R)如下:

  # Guess aesthetics if missing:
  if(missing(size)){ 
    obj@data[,"size"] <- obj@data[,1]
  } else {
    if(is.name(size)|is.call(size)){
      obj@data[,"size"] <- eval(size, obj@data)
    } else {
      obj@data[,"size"] <- obj@data[,deparse(size)]      
    }
  }
  if(missing(colour)){ 
    obj@data[,"colour"] <- obj@data[,1] 
    message("Plotting the first variable on the list")  
  } else {
    if(is.name(colour)|is.call(colour)){
      obj@data[,"colour"] <- eval(colour, obj@data)
    } else {
      obj@data[,"colour"] <- obj@data[,as.character(colour)]      
    }
  }

请帮助,我为我的生活无法弄清楚这一点。

2 个答案:

答案 0 :(得分:2)

您发布的源代码提供了一个解决方案。首先将新的数字变量附加到spatialpointsdataframe。然后使用它作为您的大小参数,但首先应用'as.name':

n <- nrow(bigfoot@data) 
bigfoot$newsize <- rep(1, n) 
head(bigfoot) 
plotKML(bigfoot, file.name='big.kml', size=as.name('newsize')) 

答案 1 :(得分:2)

目前你可以使用kml function来修改美学参数,例如:

data(eberg)
eberg <- eberg[runif(nrow(eberg))<.1,]
library(sp)
library(rgdal)
coordinates(eberg) <- ~X+Y
proj4string(eberg) <- CRS("+init=epsg:31467")
## Not run: # Simple plot
kml(eberg, file = "eberg-0.kml")
# Plot using aesthetics
kml(eberg, colour = SNDMHT_A, size = CLYMHT_A, alpha = 0.75, file = "eberg-1.kml")

我需要看看为什么&plot;绘制KML&#39;方法没有进一步传递大小&#39;论点。我经常建议包用户开始构建他们自己的可视化模板/功能,而不是使用plotKML,例如:

kml_points <- function(obj, file, z.lim, points_names="", ...){  
  kml_open(file)
  kml_layer(obj, colour=obj at data[,1], shape="http://maps.google.com/mapfiles/kml/pal2/icon18.png", 
colour_scale=SAGA_pal[[1]], points_names="", ...)
  kml_legend.bar(x=obj at data[,1], legend.file=gsub(".kml", ".png", 
file), legend.pal=SAGA_pal[[1]], z.lim=z.lim)
  kml_screen(image.file=gsub(".kml", ".png", file))
  kml_close(file)
  kml_View(file)
}

PS:如果您打算编写大量积分,请考虑使用klm.tiles函数。