大数据人|大数据第一社区

 找回密码
 注册会员

扫一扫,访问微社区

查看: 1254|回复: 0
打印 上一主题 下一主题

[其它] R-中国地图

[复制链接]
  • TA的每日心情
    奋斗
    2015-7-30 23:05
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    852

    主题

    972

    帖子

    4804

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    4804
    QQ
    跳转到指定楼层
    楼主
    发表于 2015-7-14 17:24:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    一、调用相关包
    1. install.packages(c("maps", "mapdata","sp“,"maptools"))
    2. library(maps)
    3. library(mapdata)
    4. library(sp)
    5. library(maptools)
    6. map("china")
    复制代码
    1. x=readShapePoly('D:/工作文件夹/R语言与中国地图/chinaprovinceborderdata_tar_gz/bou2_4p.shp')
    2. plot(a)
    3. plot(a,col=gray(924:0/924))

    4. getColor=function(mapdata,provname,provcol,othercol)
    5. {
    6.   f=function(x,y) ifelse(x %in% y,which(y==x),0);
    7.   colIndex=sapply(mapdata@data$NAME,f,provname);
    8.   col=c(othercol,provcol)[colIndex+1];
    9.   return(col);
    复制代码
    1. #读取数据
    2. b<-read.table("D:/工作文件夹/R语言与中国地图/population.txt",head=T)
    3. provname<-as.matrix(b[,2])
    4. pop<-as.matrix(b[,3])
    5. provcol=rgb(red=1-pop/max(pop)/10,green=1-pop/max(pop)/2,blue=0.2)
    6. plot(x,col=getColor(x,provname,provcol,"white"),xlab="",ylab="")
    复制代码


    二、利用google数据
    1. library(googleVis) #类似的包还有ggmap 等

    2. b<-read.table("D:/工作文件夹/R语言与中国地图/population.txt",head=T)

    3. G3 <- gvisGeoChart(b, locationvar='ISO代码',
    4. colorvar='人口数量',options=list(region='CN',
    5. displayMode="regions",resolution="provinces",
    6. colorAxis="{colors: ['yellow','red']}" ))

    7. plot(G3)
    复制代码


    三、中国航线地图
    1. library(maptools)
    2. x=readShapePoly('D:/工作文件夹/R语言与中国地图/chinaprovinceborderdata_tar_gz/bou2_4p.shp')
    3. plot(x)
    4. getColor=function(mapdata,provname,provcol,othercol)
    5. {
    6.   f=function(x,y) ifelse(x %in% y,which(y==x),0);
    7.   colIndex=sapply(mapdata@data$NAME,f,provname);
    8.   col=c(othercol,provcol)[colIndex+1];
    9.   return(col);}
    10. #自定义函数

    11. Par(mar(0,0,1,0),bg=”gray”)
    12. plot(x,col="black",border="black")


    13. #航线数据处理
    14. library(stringr)

    15. data.port<-read.csv('D:\\工作文件夹\\R语言与中国地图\\airports.dat',F)
    16. data.line<-read.csv('D:\\工作文件夹\\R语言与中国地图\\ routes.dat',F)
    17. chinaport<-str_detect(data.port[,'V4'],"China")
    18. chinaport <- data.port[chinaport,]
    19. chinaport<-chinaport[chinaport$V5!='',c('V3','V5','V7','V8','V9')] names(chinaport)<-c('city','code','lan','lon','att')
    20. chinaport[2,]

    21. # 找出国内航班
    22. lineinchina <- (data.line[,'V3'] %in% chinaport$code) & (data.line[,'V5'] %in% chinaport$code)

    23. chinaline <- data.line[lineinchina,c('V3','V5','V9')]
    24. names(chinaline)<-c('f','t','a’)

    25. #构建一个函数,根据机场编码得到经纬度
    26. findposition <- function(code) {
    27.     find <- chinaport$code==code
    28.     x <- chinaport[find,'lon']
    29.     y <- chinaport[find,'lan']
    30.     return(data.frame(x,y))
    31. }

    32. # 将机场编码转为经纬度
    33. from <- lapply(as.character(chinaline$source),findposition)
    34. from <- do.call('rbind',from)
    35. from$group <- 1:dim(from)[1]
    36. names(from) <- c('lon','lan','group')

    37. to <- lapply(as.character(chinaline$destination),findposition)
    38. to <- do.call('rbind',to)
    39. to$group <-1:dim(to)[1]
    40. names(to) <-c('lon','lan','group')
    41. data.line <- rbind(from,to)
    42. temp<- data.line[data.line$group<100,]


    43. #作图
    44. par(bg=”gray”)
    45. plot(x,col="black",border="black")
    46. points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)

    47. for(i in 1:5832){segments(data.line[i,1], data.line[i,2], data.line[i+5832,1],data.line[i+5832,2], col= 'blue')
    48. }

    49. for(i in 1:100){ gcIntermediate (data.line[i,1], data.line[i,2], data.line[i+100],data.line[i+100,2])
    50. }
    复制代码
    1. ggmap(get_googlemap(center = 'china', zoom=4,
    2.                     maptype='roadmap'),extent='device')+
    3.     geom_point(data=chinaport,aes(x=lon,y=lan),
    4.                colour = 'red',alpha=0.8)+
    5.     geom_line(data=data.line,aes(x=lon,y=lan,group=group),
    6.               size=0.1,alpha=0.05,color='blue')
    复制代码

    1. par(bg=”gray”)
    2. plot(x,col="black",border="black")
    3. points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.2)

    4. for(i in 1:1000){segments(data.line[i,1], data.line[i,2], data.line[i+1000,1],data.line[i+1000,2], col= 'blue' )
    5. }
    复制代码

    1. #弧线及其颜色处理
    2. library(maps)
    3. library(maptools)
    4. library(geosphere)
    5. map("china",col="gray20",bg="black",mar=c(0,0,0,0))
    6. title("中国航线图", sub = " SimSun",
    7.       cex.main =1, col.main= "gray",)
    8. points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)

    9. from <- lapply(as.character(linecount$source),findposition)
    10. from <- do.call('rbind',from)
    11. to <- lapply(as.character(linecount$destination),findposition)
    12. to <- do.call('rbind',to)


    13. map("china",col="gray20",bg="black",mar=c(0,0,0,0))
    14. title("中国航线图", sub = " SimSun",
    15.       cex.main =1, col.main= "gray",)
    16. points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)
    17. #颜色调整
    18. library(RColorBrewer)
    19. display.brewer.all(type = "seq")
    20. display.brewer.all()

    21. color<-brewer.pal(9,"PRGn")
    22. color<-colors()[grep("gray",colors())]

    23. map("china",col="gray20",bg="black",mar=c(0,0,0,0))
    24. title("中国航线图", sub = " SimSun", col.main= "gray",)
    25. points(data.line$lon,data.line$lan, pch = 19, col ="white",cex=0.1)


    26. for(i in 1:1304)
    27. { n= ceiling(18/linecount[i,3])
    28. lines(gcIntermediate(from[i,], to[i,], n=100,addStartEnd=T) ,col="blue")
    29. }
    复制代码


    R语言交流QQ群:99598210(欢迎加入)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条


    id="mn_portal" >首页Portalid="mn_P18" onmouseover="navShow('P18')">应用id="mn_P15" onmouseover="navShow('P15')">技术id="mn_P37" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">前沿id="mn_P36" onmouseover="navShow('P36')">宝箱id="mn_P61" onmouseover="showMenu({'ctrlid':this.id,'ctrlclass':'hover','duration':2})">专栏id="mn_P65" >企业id="mn_Nd633" >导航 折叠导航 关注微信 关注微博 关注我们

    QQ|广告服务|关于我们|Archiver|手机版|小黑屋|大数据人 ( 鄂ICP备14012176号-2  

    GMT+8, 2024-5-19 05:49 , Processed in 0.269604 second(s), 34 queries .

    Powered by 小雄! X3.2

    © 2014-2020 bigdataer Inc.

    快速回复 返回顶部 返回列表