Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >空间数据处理(一)

空间数据处理(一)

作者头像
火星娃统计
发布于 2021-03-09 08:03:30
发布于 2021-03-09 08:03:30
1.8K00
代码可运行
举报
文章被收录于专栏:火星娃统计火星娃统计
运行总次数:0
代码可运行

Spatial 数据简介

Vector data

空间数据的主要形式,类型是点、线和多边形。

点:数据结构为坐标对和附带的值,比如一个地点的温度和它附带的信息比如站点

线:线指的是一系列线段组成的结构,比如河流

多边形:为封闭的折线,起始坐标和终点坐标一致

Raster data

栅格数据通常用于表示空间连续现象,如海拔。栅格将世界划分为大小相同的矩形网格,在遥感数据中称为像素,所有这些网格都有一个或多个值(或缺失值)的变量。栅格单元值通常应该代表它所覆盖区域的平均(或大多数)值或者是中心点的值

与矢量数据相比,栅格数据并不显示存储坐标。通过划分范围来确定,从行数和列数来确定每个单元格的分辨率。

空间数据的简单例子

这里的例子是10个气象站的位置和它们每年的降水量

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 导入和下载需要的包
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
# install.packages("rgdal",dependencies = T)
# install.packages("sp")
# install.packages("raster")
library(raster)
library(sp)
# 气象站名字模拟,A-J
name <- LETTERS[1:10]
# 经纬度模拟
longitude <- c(-116.7, -120.4, -116.7, -113.5, -115.5,
               -120.8, -119.5, -113.7, -113.7, -110.7)
latitude <- c(45.3, 42.6, 38.9, 42.1, 35.7, 38.9,
              36.2, 39, 41.6, 36.9)
# 合并经纬度为矩阵
stations <- cbind(longitude, latitude)

# 模拟降水量数据
# runif函数生成随机正态分布数0-1
set.seed(0)
precip <- round((runif(length(latitude))*10)^3)

# 根据降水量设置点的大小
psize <- 1 + precip/500


# 绘制点图
plot(stations, cex=psize, pch=20, col='red', main='Precipitation')
# 气象站点名字添加
text(stations, name, pos=4)
# 添加图例
breaks <- c(100, 250, 500, 1000)
legend.psize <- 1+breaks/500
legend("topright", legend=breaks, pch=20, pt.cex=legend.psize, col='red', bg='gray')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

接下来添加线段和几何图形

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
# 此对象为几何图形的经纬度
x <- cbind(lon, lat)
# 绘制气象站坐标
# stations 为包含经纬度的矩阵
plot(stations, main='Precipitation')
# 绘制不规则几何图形ploygon函数,可以不用首位点相同
polygon(x, col='blue', border='light blue')
# 将气象站使用线段链接
lines(stations, lwd=3, col='red')
# 绘制几何图形的点的位置
points(x, cex=2, pch=20)
# 绘制气象站的点
points(stations, cex=psize, pch=20, col='red', main='Precipitation')
代码语言:javascript
代码运行次数:0
运行
复制

上述的代码只是简单的实现地图绘制的点、线、几何图形的方式。

Vector 数据

在处理矢量数据的时候,为了方便编写函数,因此定义了很多的类,也就是面向对象,这些类被很多包使用,sp包是处理空间数据的包,虽然sf包也在慢慢完善,但是sp仍然是使用最多的包。

sp包引入了许多类的名称包括:对于矢量数据SpatialPointsSpatialLinesSpatialPolygons分别代表点、线、几何图形。如果需要包含数据,那么对象为SpatialPointsDataFrameSpatialLinesDataFrameSpatialPolygonsDataFrame。接下来从头创建一些空间对象。

SpatialPoints

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#建立数据框
longitude <- c(-116.7, -120.4, -116.7, -113.5, -115.5, -120.8, -119.5, -113.7, -113.7, -110.7)
latitude <- c(45.3, 42.6, 38.9, 42.1, 35.7, 38.9, 36.2, 39, 41.6, 36.9)
lonlat <- cbind(longitude, latitude)
创建spatialpoints对象
library(sp)
pts <- SpatialPoints(lonlat)

# 查看类型
class (pts)
## [1] "SpatialPoints"
## attr(,"package")
## [1] "sp"
# 查看具体内容
showDefault(pts)
## An object of class "SpatialPoints"
## Slot "coords":
##       longitude latitude
##  [1,]    -116.7     45.3
##  [2,]    -120.4     42.6
##  [3,]    -116.7     38.9
##  [4,]    -113.5     42.1
##  [5,]    -115.5     35.7
##  [6,]    -120.8     38.9
##  [7,]    -119.5     36.2
##  [8,]    -113.7     39.0
##  [9,]    -113.7     41.6
## [10,]    -110.7     36.9
## 
## Slot "bbox":
##              min    max
## longitude -120.8 -110.7
## latitude    35.7   45.3
## 
## Slot "proj4string":
## CRS arguments: NA
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

可以看到有一个bbox,这是一个框,显示的是整个数据涵盖的经纬度范围,通过这四个值,经纬度两两匹配,可以确定四个角的经纬度。proj4string是坐标投射的算法,这里没有指定,所以为NA。

指定投射方式为+proj=longlat +datum=WGS84

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
crdref <- CRS('+proj=longlat +datum=WGS84')
pts <- SpatialPoints(lonlat, proj4string=crdref)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用spatialpoint穿件spatialpointdataframe
precipvalue <- runif(nrow(lonlat), min=0, max=100)
df <- data.frame(ID=1:nrow(lonlat), precip=precipvalue)
# 将降水量数据集与spatialpoints合并
ptsdf <- SpatialPointsDataFrame(pts, data=df)
ptsdf

## class       : SpatialPointsDataFrame 
## features    : 10 
## extent      : -120.8, -110.7, 35.7, 45.3  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs 
## variables   : 2
## names       : ID,           precip 
## min values  :  1, 6.17862704675645 
## max values  : 10, 99.1906094830483
# 查看内容
showDefault(ptsdf)
## An object of class "SpatialPointsDataFrame"
## Slot "data":
##    ID    precip
## 1   1  6.178627
## 2   2 20.597457
## 3   3 17.655675
## 4   4 68.702285
## 5   5 38.410372
## 6   6 76.984142
## 7   7 49.769924
## 8   8 71.761851
## 9   9 99.190609
## 10 10 38.003518
## 
## Slot "coords.nrs":
## numeric(0)
## 
## Slot "coords":
##       longitude latitude
##  [1,]    -116.7     45.3
##  [2,]    -120.4     42.6
##  [3,]    -116.7     38.9
##  [4,]    -113.5     42.1
##  [5,]    -115.5     35.7
##  [6,]    -120.8     38.9
##  [7,]    -119.5     36.2
##  [8,]    -113.7     39.0
##  [9,]    -113.7     41.6
## [10,]    -110.7     36.9
## 
## Slot "bbox":
##              min    max
## longitude -120.8 -110.7
## latitude    35.7   45.3
## 
## Slot "proj4string":
## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

SpatialLines 和 SpatialPolygons

制作线,这里的函数均来自raster

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
lonlat <- cbind(lon, lat)
# 使用splines函数制作线
lns <- spLines(lonlat, crs=crdref)
lns
## class       : SpatialLines 
## features    : 1 
## extent      : -117.7, -111.9, 37.6, 42.9  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

制作几何图形,几何图形的对象结构较为复杂,不做展开

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用函数sppolygons
pols <- spPolygons(lonlat, crs=crdref)
pols
## class       : SpatialPolygons 
## features    : 1 
## extent      : -117.7, -111.9, 37.6, 42.9  (xmin, xmax, ymin, ymax)
## crs         : +proj=longlat +datum=WGS84 +no_defs
绘制线和几何图形
plot(pols, axes=TRUE, las=1)
plot(pols, border='blue', col='yellow', lwd=3, add=TRUE)
points(pts, col='red', pch=20, cex=3)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

Raster 数据

栅格数据处理主要使用的是raster包。raster包主要的三个对象,RasterLayerRasterBrickRasterStack

RasterLayer

RasterLayer对象表示单层栅格数据。一个RasterLayer对象存储一些描述它的基本参数。这些参数包括列和行数、空间范围和坐标参考系统。此外,RasterLayer可以存储单元值的文件的信息。

创建RasterLayer

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建一个1010列的栅格数据框架
r <- raster(ncol=10, nrow=10, xmx=-80, xmn=-150, ymn=20, ymx=60)
r
## class      : RasterLayer 
## dimensions : 10, 10, 100  (nrow, ncol, ncell)
## resolution : 7, 4  (x, y)
## extent     : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs
# 给栅格数据单元添加值
values(r) <- 1:ncell(r)
r
## class      : RasterLayer 
## dimensions : 10, 10, 100  (nrow, ncol, ncell)
## resolution : 7, 4  (x, y)
## extent     : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## source     : memory
## names      : layer 
## values     : 1, 100  (min, max)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

绘制图形

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot(r)
# 添加几何和线段
lon <- c(-116.8, -114.2, -112.9, -111.9, -114.2, -115.4, -117.7)
lat <- c(41.3, 42.9, 42.4, 39.8, 37.6, 38.3, 37.6)
lonlat <- cbind(lon, lat)
# 绘制几何图形
pols <- spPolygons(lonlat, crs='+proj=longlat +datum=WGS84')
# 添加点
points(lonlat, col='red', pch=20, cex=3)

# 绘制几何点
plot(pols, border='blue', lwd=2, add=TRUE)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

RasterStack和RasterBrick

在大多数的情况下,使用的是单层的栅格数据分析,但是在一些案例中,需要使用到多层数据,因此引入RasterStackRasterBrickRasterStack针对的是单一的多层文件,RasterBrick针对的是多个文件

事实上,Rasterstack是具有相同空间范围和分辨率的RasterLayer对象的集合。

RasterBrick是一个真正的多层对象,处理RasterBrick比处理表示相同数据的Rasterstack更有效.

制作RasterStack

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# r是rasterlayer
r2 <- r * r
r3  <- sqrt(r)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用stack函数,建立rasterstack对象
s <- stack(r, r2, r3)
s

## class      : RasterStack 
## dimensions : 10, 10, 100, 3  (nrow, ncol, ncell, nlayers)
## resolution : 7, 4  (x, y)
## extent     : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## names      : layer.1, layer.2, layer.3 
## min values :       1,       1,       1 
## max values :     100,   10000,      10
# 绘制图像
plot(s)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

可以看到对象s有三个层,使用brick可以转换stick对象为brick

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
b <- brick(s)
b
## class      : RasterBrick 
## dimensions : 10, 10, 100, 3  (nrow, ncol, ncell, nlayers)
## resolution : 7, 4  (x, y)
## extent     : -150, -80, 20, 60  (xmin, xmax, ymin, ymax)
## crs        : +proj=longlat +datum=WGS84 +no_defs 
## source     : memory
## names      : layer.1, layer.2, layer.3 
## min values :       1,       1,       1 
## max values :     100,   10000,      10
代码语言:javascript
代码运行次数:0
运行
复制
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R矢量地图栅格化(将shapefile转换成raster)
在处理地图数据时候,经常会碰到shp与raster两种格式。通常r中应用较多的为raster栅格数据。shp文件太大,读取也不方便。逐渐被GeoJSON替代,用sf去处理与读取。 R在读取shp时候,处理,或者画图都会碰到,反应迟钝问题。所以,我们有时候会根据需要,将shp文件转成raster,不仅可视化快,还可方便数据处理与提取。shp文件转成raster主要解决以下问题:
Jamesjin63
2022/11/03
1.8K0
R矢量地图栅格化(将shapefile转换成raster)
R可视乎|空间地理数据可视化(1)
研究生讨论班第一次用 slides 作报告,主要讲了《Geospatial Health Data》[1]一书中关于空间地理数据可视化的内容。文末给出对应的 pdf 网页版本。
庄闪闪
2021/08/20
3.5K0
R可视乎|空间地理数据可视化(1)
ggplot2优雅的批量绘制圆形地图
R语言数据分析指南
2023/08/18
5480
ggplot2优雅的批量绘制圆形地图
(数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇
  在上一篇文章中我们对geopandas中的数据结构展开了较为全面的学习,其中涉及到面积长度等计算的过程中提到了具体的计算结果与所选择的投影坐标系关系密切,投影坐标系选择的不恰当会带来计算结果的偏差,直接关乎整个分析过程的有效与否。
Feffery
2020/02/19
1.7K0
详谈R语言构建地理投影系统绘制高端地图
❝本节来详细介绍如何使用R语言来构建地理投影系统绘制世界地图,细节挺多的小编做了详细的注释;结果仅供参考❞ 加载R包 library(tidyverse) library(sf) library(camcorder) 导入数据 world <- read_sf("countries.geojson") %>% janitor::clean_names() %>% rmapshaper::ms_simplify(keep = 0.2) tomato_prod <- read_csv("tomato-
R语言数据分析指南
2022/12/20
1.9K0
详谈R语言构建地理投影系统绘制高端地图
矢量数据投影转换
接着上一篇博文中,我们得到了WGS84坐标系下的中国省区图,而我们一般中国地图中使用的是割圆锥投影。
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.8K0
PostGIS空间数据库简明教程
在本文中,我们将介绍 PostGIS 的一些基础知识及其功能,以及一些可用于简化解决方案或提高性能的提示和技巧。
用户1758543
2023/05/09
3.2K0
PostGIS空间数据库简明教程
GIS世界里坐标系“黑话”
世界大地测量系统(World geodetic system,简称WGS)是指1960年以来, 由美国国防制图局(DMA)建立的四个世界大地测量系统(WGS60、WGS66、WGS72和WGS84)的统称
追风骚年
2021/11/19
2.4K0
用R处理NASA数据(.hdf 或.nc文件)
这里不在赘述,参考如何获取NASA数据,下面的例子根据下载的LandCover与Rainfall数据进行展示,如何利用R语音进行读取,然后绘图。先加载所需R包及地图文件
Jamesjin63
2022/10/25
1.3K0
用R处理NASA数据(.hdf 或.nc文件)
在 R 中使用 sf 和 ggplot2 绘制河流地图
今年的3月22日是“世界水日”,它关注淡水的重要性,并引起人们对无法获得安全用水的22亿人的关注。今年的重点是地下水,这是为我们的泉水、河流、湖泊和湿地提供食物的宝贵来源。
气象学家
2022/04/18
2.8K0
在 R 中使用 sf 和 ggplot2 绘制河流地图
【GEE】4、 Google 地球引擎中的数据导入和导出
了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求,但它们的选择很可能也受到当地天气条件等动态因素的影响。除了直接观察之外,很难将动物行为与天气条件联系起来。在这个单元中,我们将从美洲狮收集的 GPS 项圈数据与通过 GEE 访问的 Daymet 气候数据集的每日温度估计值集成。
Twcat_tree
2023/11/07
1.2K0
【GEE】4、 Google 地球引擎中的数据导入和导出
GPM 降雨量数据处理 -R(坐标系转换)
今天给大家介绍下,R处理NASA下载的降雨量数据 在进行环境数据分析时候,经常需要用到降雨量的信息,而NASA提供了每年,每个月甚至每天的降雨量数据。 如何下载NASA降雨量数据,见此链接。
Jamesjin63
2022/10/25
1.2K0
GPM 降雨量数据处理 -R(坐标系转换)
R-tmap 绘制带指北针和比例尺的空间地图
昨天有小伙伴在讨论群里提问"有没有关于绘制带比例尺和指北针的地图可视化教程",我也进行了答复,没想到关注的人比较多,那就安排推文教程(最近在系统整理资料,所以这篇也是计划外的
气象学家
2020/09/22
3K1
R-tmap 绘制带指北针和比例尺的空间地图
空间数据可视化笔记——simple features空间对象基础
是不是感觉被封面图和不明觉厉的题目给骗进来了哈哈哈,今天这篇是理论篇,没有多少案例,而且还很长,所以静不下心的小伙伴儿可以先收藏着,时间充裕了再看。 ---- 当今互联网和大数据发展的如此迅猛,大量的运营与业务数据需要通过可视化呈现来给商业分析人员提供有价值的决策信息,而地理信息与空间数据可视化则是可视化分析中至关重要而且门槛较高的一类。 通常除了少数本身具备强大前端开发能力的大厂之外,很多中小型企业在内部预算资源有限的情况下,并不具备自建BI和完整可视化框架的能力。需要借助第三方提供的开源可视化平台或者
数据小磨坊
2018/04/11
1.7K0
空间数据可视化笔记——simple features空间对象基础
R-tmap 绘制带指北针和比例尺的空间地图
昨天有小伙伴在讨论群里提问"有没有关于绘制带比例尺和指北针的地图可视化教程",我也进行了答复,没想到关注的人比较多,那就安排推文教程(最近在系统整理资料,所以这篇也是计划外的
DataCharm
2021/02/22
1K0
R-tmap 绘制带指北针和比例尺的空间地图
使用 python 处理 nc 数据
前言 这两天帮一个朋友处理了些 nc 数据,本以为很简单的事情,没想到里面涉及到了很多的细节和坑,无论是“知难行易”还是“知易行难”都不能充分的说明问题,还是“知行合一”来的更靠谱些,既要知道理论又要知道如何实现,于是经过不太充分的研究后总结成此文,以记录如何使用 python 处理 nc 数据。 一、nc 数据介绍 nc 全称 netCDF(The Network Common Data Form),可以用来存储一系列的数组,就是这么简单(参考https://www.unidata.ucar.edu/so
魏守峰
2018/07/06
3.5K0
geopandas:Python绘制数据地图
GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。 GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。 GeoPandas的官方文档地址为:GeoPandas-doc。 本文主要参考GeoPandas Examples Gallery。 GeoPandas的基础使用见Python绘制数据地图1-GeoPandas入门指北。 GeoPandas的可视化入门见Python绘制数据地图2-GeoPandas地图可视化。
luckpunk
2023/09/14
3.8K0
geopandas:Python绘制数据地图
(数据科学学习手札78)基于geopandas的空间数据分析——基础可视化
  通过前面的文章,我们已经对geopandas中的数据结构、坐标参考系以及文件IO有了较为深入的学习,在拿到一份矢量数据开始分析时,对其进行可视化无疑是探索了解数据阶段重要的步骤。
Feffery
2020/03/04
3.6K0
(数据科学学习手札78)基于geopandas的空间数据分析——基础可视化
一个R语言中操纵矢量空间数据的标准化工具—sf
摘要 Simple features是一种在计算机中编码矢量空间数据(点、线、面等)的标准化方法。sf包在R语言中引入了simple features对象,它基本具备和sp、rgeos、rgdal一样的矢量空间数据处理能力。本文主要描述此包的基本功能,其在R语言诸多扩展生态系统中的地位,以及在连接R语言与其他空间计算系统中的潜在价值。
数据小磨坊
2019/09/17
4.4K0
一个R语言中操纵矢量空间数据的标准化工具—sf
左手用R右手Python系列12——空间数据可视化与数据地图
以前我一直觉得Python的绘图工具与R语言ggplot2比起来,不够优雅,这也是我一直坚定的选择使用R+ggplot2深入的学习数据可视化的原因,ggplot2在坐标系的整合与兼容性和扩展性上确实技高一筹,所以ggplot2成了可视化的巨无霸,成了可视化界的微信,不仅自身生态日趋完善,而且还有众多的开发者为其开发辅助功能包(你可以理解为依附于微信的小程序)。 最近偶然在学习Python可视化的过程中,了解到了geopandas,确实第一眼看着很眼熟,或许你第一眼就能把它与pandas联系起来。的确,它跟
数据小磨坊
2018/04/11
2.2K0
左手用R右手Python系列12——空间数据可视化与数据地图
推荐阅读
相关推荐
R矢量地图栅格化(将shapefile转换成raster)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档