从R中的子集绘制大圆

时间:2014-10-27 19:07:43

标签: r maps subset great-circle

我有一个数据框,经过一些处理(例如地理编码)具有以下特征:

'data.frame':   13 obs. of  5 variables:
$ id      : int  1 2 3 4 5 6 7 8 9 10 ...  
$ ciudad  : Factor w/ 10 levels "Auch","Barcelona",..: 8 4 5 3 2 7 9 10 6 6 ...  
$ proyecto: int  1 1 1 1 1 1 1 1 2 2 ...  
$ lon     : num  -1.131 0.564 -9.139 0.627 2.173 ...  
$ lat     : num  38 44.2 38.7 44.5 41.4 ...

每个proyect(proyecto)都有一个城市列表。 我需要以径向方式连接其中第一个(项目的)。这就是我到目前为止所做的:

# Capitalizing first letters
municipios <- read.csv("ciudades.csv", header=TRUE, sep=";")
stri_trans_totitle(as.character(municipios$ciudad))
write.csv(municipios, file = "municipios.csv")

# Obtaining latitude & longitude
lonlat <- geocode(as.character(municipios$ciudad))
municipios_lonlat <- cbind(municipios, lonlat)
write.csv(municipios_lonlat, file = "municipios_lonlat.csv")

str(municipios_lonlat)

# Plotting a simple map
xlim <- c(-13.08, 8.68)
ylim <- c(34.87, 49.50)
map("world", col="#191919", fill=TRUE, bg="#000000", lwd=0.05, xlim=xlim, ylim=ylim)

# Plotting cities
symbols(municipios_lonlat$lon, municipios_lonlat$lat, bg="#e2373f", fg="#ffffff", lwd=0.5, circles=rep(1, length(municipios_lonlat$lon)), inches=0.05, add=TRUE)

# Subsetting, splitting & connecting
uniq <- unique(unlist(municipios_lonlat$proyecto))
for (i in 1:length(uniq)){
  data_1 <- subset(municipios_lonlat, proyecto == uniq[i])
  for (i in 2:length(data_1$lon)-1){
    lngs <- c(data_1$lon[1], data_1$lon[i])
    lats <- c(data_1$lat[1], data_1$lat[i])
    lines(lngs, lats, col="#e2373f", lwd=2)
  }
}

但它不太像真的。 所以我需要使用大圆圈来改善生成的地图。我知道我必须使用geosphere库,并使用与我在上一段中所做的类似的循环。但我尝试的东西不起作用。请你帮帮我吧你是我唯一的希望欧比万肯诺比斯。

注意:here您可以下载我的数据。

0 个答案:

没有答案