分享

R语言地理可视化:中国国内航线航班信息统计、绘制分布夜景图

 拓端数据 2023-02-28 发布于浙江

最近,有一种说法:“中国经济发展的命脉就是石油和航线”。因此,航线的重要性不言而喻

近年来,中国的航运业发展迅速,不仅带来了经济效益和社会效益,也带来了就业岗位。因此,我们有必要分析航线分布状况。

为了更好地帮助客户进行航运业务、航线设计、港口定位等决策研究,我们使用基于R语言地理信息系统的中国航线分布可视化。该方法利用地理信息系统的空间数据库管理功能,对中国各航线进行统计和分析,并基于R语言统计分析工具,对分析结果进行可视化处理,生成中国航线的空间分布图。

读取地图绘制所需的包

以下软件包均是绘制地图相关的 。

library(maptools)
library(ggplot2)
library(ggmap)
library(maps)
library(rgeos)
library(shapefiles)
library(geosphere)
library(plyr)

获取地图数据来源

航线、机场坐标

机场: airports.dat

航线: routes.dat

板块地图都市地图

世界地图: ne_10m_admin_0_countries.shp

都市地图: ne_10m_urban_areas.shp

# 读取都市地图文件 读取版图地图文件  
urbanareasin <- readShapePoly("ne_0m_uranareas.shp")
worldmapsin <- readShapePol("ne_1_admin_0_countries.shp")
# 以下为格式转化
worldmap <- fortifyworldapsin)

这一部分的主要工作是将shapefile文件转化为R可以识别的格式,然后建立数据与地图坐标间的关联。本文使用了航线频数来计算地图航线绘制的亮度。读者根据需要可以自行关联所需数据,例如成本,平均成本,旅客人次等,以达到不同的研究目的。

# 开始抽取机场数据  
airports <- rea.table("airorts.dat", sep = ",", header = FALSE)
worldport <- airports[airpot$V5 != "", c("V3", "V5",
  "V7", "V8", "V9")]
names(worldprt) <- c("city", "code", "lan", "lon", "att")

有453条航线无标识

  
table(lineinworld)

summary(worldline)

统计部分国内站点的出发的航班信息

#北京出发航班  
 head(worldline[worldline$AIRPORT_FROCODE=="PEK",] )

排序

e$AIRPORT_TOCDE)[2,],  
   decreasing = TRUE)))


点击标题查阅往期内容

R语言淮河流域水库水质数据相关性分析、地理可视化、广义相加模型GAM调查报告

左右滑动查看更多

01

02

03

04

北京到达航班

head(worldline[worldine$AIRPORT_TOCODE=="PEK",] )

上海出发航班

head(worldline[worlline$AIRPORTFROM_CODE=="SHA",] )

上海到达航班

head(worldline[worldline$AIRPOT_T_CODE=="SHA",] )

香港出发航班

head(worldline[worldline$ARPORT_FRO_CODE=="SHA",] )

地图旋转

这一步是对地图进行坐标变换,设置中国为世界中心,这里做了简单的坐标加减运算。

center <- 115

# 航线坐标计算中心距离

gcircles$long.reenter <- ielse(gcicles$long < center -

由于地图是图形数据,若是简单移动,地图会被切割,绘制时会出现图形变形等错误,故需要对地图数据进行再处理。该过程分为两步:

处理 1 :图形切割后,切割图形重分组。

处理 2 :重分组后,非闭合图形,闭合处理。

切割图形重分组算法

检查组内不同经度300度以上的坐标,作为极端值,然后对数据进行平均 。然后分别对极端值分组标号为一组,将低于300的坐标作为一组。

闭合曲线

分别计算世界点图每个航线的起始点 终点,和航线的曲线数据 . 找到曲线数据中不连续的数据即为没有闭合的曲线 , 然后 , 将断点数据重新赋值 , 进行连接 , 得到闭合的航线曲线 .

g <- rep(1, length(df[, longcol]))

  if (diff(rage(df[, lngcol])) > 300) {

  
    d <- df[, longcol] > mean(range(df[, longcol]))

开始写原始算法替换函数 世界地图重分组


 

#计算世界地图的经纬度的均值

worldmp.men <- agregate(x = wrldmap[, ("long.recenter")],
   by = list(worldmap$group), FUN = mean)
 

#计算世界地图的经纬度的最小值

 

worldma.min <- aregate( = wrldmap[, c("longrecenter")],
  by = list(worldmap$group), FUN = min)

 

#计算世界地图的经纬度的最大值

 

woldmap.ma <- aggregate(x worldmap[, c("long.recenter")],

  by = list(wormap$group) FUN = max)

 

worldmap.md <- cbind(worldma.mea, worldap.in[,

    2]
, worldap.max[, 2])

#给数据的变量名命名

colnames(worldmpmd) <- c("group", mean", "min" "max")

 

worldmapt <- join(x = worldmap, y = wolmap.md, b = c("group"))
# 闭合曲线

worlmap.rg <- orldmap.rg[order(woldm$goup.regroup,

   worldmap.rg$order), ]

最后得到世界航线的曲线和坐标 (wrld) 以及城市航线的坐标 (urb), 并使用geom_polygongeom_line函数进行设置 . 其颜色 粗细等。最后使用ggplot函数进行绘制。


urb <- geom_polygon(aes(long.recenter, lat, group = group.regroup),

  size = 0.3, color = "#FDF5E6", fill = "#FDF5E6",

  alpha = 1, data = urbanareas.cp)

# 放大系数

bigmap <- 1

geom_polygon(aes(lon,lat,grop = group), size = 0.2,

   fill = '#f9f9', colou = 'grey6, data = worldmap) +

  geom_line(aes(long.recete,lat,grup = grop.regroup, clor = freq,

    alpha = freq), sie = 0.4, dat = gcicles.rg)





    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多