• R语言地理信息空间可视化


    1.1 地图的文件格式

    shp数据结构:
    1、分文件存储信息:

    name.dbf name.shp name.shx

    2、获取渠道

    https://gadm.org/download_country_v3.html

    3、导入工具

    maptools rgdal
    sf


    json数据结构:
    1、key-value形式的键值对结构
    name.json

    2、获取渠道
    http://datav.aliyun.com/static/tools/atlas/

    3、导入工具
    rgdal
    sf

    个人使用下来的感受是阿里云的json文件使用起来会更加方便一点。

    1.2 数据文件的读取

    rgdal库的readOGR(dsn, layer,stringsAsFactors,encoding=NULL……)函数
      读入数据转换为sp数据模型


    sf库的st_read(dsn, layer, stringsAsFactors)函数
      读入数据转换为sf数据模型
      dsn: 读入的文件名
      layer:读入的层数(如果是多层地图的话)
      stringsAsFactors:是否将读入文件中的字符串数据转换为因子数据
      encoding:文件的编码格式


    1.3 地理数据模型
    SP(SpatialPolygonsDataFrame)格式
      数据描述层(data.frame):名称、ID、编号、简写、IOS编码等
      几何映射层(polygons):每一个行政区的多边形边界点(按order排序、按group分组)
        需要使用fortify函数将polygons数据转换为数据框格式。

    SF(Simple feature list column)格式
      获取的是完整的数据框( data.frame )格式
      将每一个行政区对于的几何分界点封装成一个list对象

    个人使用比较多的是SF格式的数据模型。

    1.4 总结

     文件格式与函数方法关系图

     

    1.5 上手实战

    设计目的:进行地理文件的加载、数据转换及基础处理,将地理信息数据与业务数据的融合(sp与sf数据模型),添加地理标签,应用地理坐标轴,最终完成一个地理空间可视化的小demo。

    1、从阿里地图下载省级地图,加载并实现地图可视化,在绘图前先做一些准备工作:

    library("ggplot2")
    library("rgdal")
    library("sf")
    library("sp")
    library("ggthemes")
    library('dplyr')
    library("data.table")  #fread函数用于读取CVS表格
    library("ggrepel")
    
    rm(list = ls())
    gc()
    setwd("D:/空间可视化与地理基础")#指定读取文件的路径

    1)      某省级地图的地图实现

    #rgdal包读入:
    gansu_map <- readOGR("甘肃省.json",stringsAsFactors=FALSE)
    Encoding(gansu_map@data$name) <- 'UTF-8'
    frame_data = gansu_map@data
    #frame_polygon = gansu_map@polygons
    frame_polygon = fortify(gansu_map)  
    ggplot(frame_polygon,aes(long,lat,group = group)) +geom_polygon(colour = 'white')

    2)      按市进行填充

    division_data1 <- gansu_map@data 
    division_data1 <- mutate(division_data1,id = row.names(division_data1))
    division_data1 <- division_data1[,c("id","name")]    #行政区划层
    #division_data <- china_map1@data %>% mutate(id = row.names(.)) %>% .[,c("id","NAME")]    #行政区划层
    
    polygons_data1 <- fortify(gansu_map)     #地理信息边界点数据
    polygons_data1 <- polygons_data1[,c(1,2,7,3,6)]
    #polygons_data <- fortify(china_map1)  %>% .[,c(1,2,7,3,6)]  
    
    division_data1$id <- as.numeric(division_data1$id)
    polygons_data1$id <- as.numeric(polygons_data1$id)
    final_mapdata1 <- left_join(polygons_data1,division_data1,by= 'id')
    
    ggplot(final_mapdata1,aes(long,lat,group = group)) +
      geom_polygon(aes(fill=name),colour = 'white')+
      coord_map("polyconic")

    运行效果如下:

    3)      添加市级的标签

    ggplot() +
      geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=name),colour = 'white')+
      geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
      coord_map("polyconic")

    2、对上图实现的地图可视化,添加业务信息:

    1)      实现连续量的填充。

    #连续量的填充
    ggplot() +
      #用经度数值填充
      geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=long),colour = 'white')+
      #加上城市名称标签
      geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
      #加上业务信息(中心点经纬度信息)
      geom_text_repel(data=frame_data,aes(x=centroid1-0.25,y=centroid2+0.25,label=paste0(round(centroid1,0),",",round(centroid2,0))))+
      coord_map("polyconic")

    2)      实现离散量的填充。

    #离散量的填充
    ggplot() +
      #用城市名称填充
      geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=name),colour = 'white')+
      #加上城市名称标签
      geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
      #加上业务信息(中心点经纬度信息)
      geom_text_repel(data=frame_data,aes(x=centroid1-0.25,y=centroid2+0.25,label=paste0(round(centroid1,0),",",round(centroid2,0))))+
      coord_map("polyconic")

    3)      调整地图坐标系。

    #设置等距圆柱/球面投影-gilbert
    ggplot() +
      #用城市名称填充
      geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=name),colour = 'white')+
      #加上城市名称标签
      geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
      #加上业务信息(中心点经纬度信息)
      geom_text_repel(data=frame_data,aes(x=centroid1-0.25,y=centroid2+0.25,label=paste0(round(centroid1,0),",",round(centroid2,0))))+
      coord_map("gilbert")

    #兰伯特等积方位投影-azequalarea
    ggplot() +
      #用城市名称填充
      geom_polygon(data=final_mapdata1,aes(x=long,y=lat,group = group,fill=name),colour = 'white')+
      #加上城市名称标签
      geom_text_repel(data=frame_data,aes(x=centroid1,y=centroid2,label=name))+
      #加上业务信息(中心点经纬度信息)
      geom_text_repel(data=frame_data,aes(x=centroid1-0.25,y=centroid2+0.25,label=paste0(round(centroid1,0),",",round(centroid2,0))))+
      coord_map("azequalarea")

    参考文献:

    [1]张杰.《R语言数据可视化之美-专业图表绘制指南(增强版)》第11章 地理空间型图表

  • 相关阅读:
    Spark算子(二)Action
    Spark中利用Scala进行数据清洗(代码)
    Spark核心概念
    Scala面向对象详解
    Scala控制语句
    Scala基础语法
    Scala简介、安装、函数、面向对象
    Hbase优化
    管理员必备的20个Linux系统监控工具
    iOS 关于webView的使用方法
  • 原文地址:https://www.cnblogs.com/tntblog/p/13789195.html
Copyright © 2020-2023  润新知