在气象数据分析中,地理空间要素是一个必须考虑的关键特征项,也是重要的影响因素。例如气温会随着海拔的升高而降低,地形的坡向朝向也会影响风速的分布,此外,典型的地形会形成特定的气候条件,也是数据挖掘中可以利用的区域划分标准。数据分析中,地理空间分析往往能提供有效的信息,辅助进行决策。随着航空遥感行业的发展,积累的卫星数据也成为了数据挖掘的重要数据来源。 地理空间分析有好多软件可以支持,包括Arcgis,QGIS等软件平台,本系列文章将会着重分享python在地理空间分析的应用。主要包括地理空间数据的介绍,常用的python包,对矢量数据的处理,对栅格数据的处理,以及常用的算法和示例。 地理空间数据包括几十种文件格式和数据库结构,而且还在不断更新和迭代,无法一一列举。本文将讨论一些常用的地理空间数据,对地理空间分析的对象做一个大概的了解。 地理空间数据最重要的组成部分:
•地理位置 标示数据空间位置的信息,例如经纬度•主题信息 主题信息涵盖的范围广泛,可以是卫星的光谱数据,也可以是对应地理位置的统计数据如人口,面积,长度等•此外,空间索引一般也是地理空间数据的共性,空间索引创建了一个向导,能够让软件无需扫描数据集中的每一行记录快速定位查询结果。
矢量数据目前是最常用的地理空间格式,因为它是存储空间信息最有效的一种方式。矢量数据只存储几何图元,包括点、线和多边形。可供选择的矢量格式数目很饿的,开源矢量库OGR支持超过86种矢量格式,FME支持超过188种矢量格式。下面将简单介绍击中常用的数据格式:
Shapefile文件
使用最普遍的地理空间格式是Esri的Shapefile文件,可以通过arcgis软件或者第三方转换工具包将任意格式的矢量数据转换成Shapefile文件格式,例如OGR库,python中解析Shapefile文件的模块大都是基于OGR库的。 Shapefile文件格式是有多个文件组成,最重要的文件包括3种,.shp、.shx、.dbf文件。•.shp 用于存储要素几何的主文件,其中包含几何图形(读取的对象)•.shx 形状索引文件,可以加快访问速度•.dbf 数据库文件,包括几何要素的属性信息•其他 .prj 以WKT格式存储的地图投影信息 Shapefile文件是一个整体,重命名文件和编辑文件时,需要相关文件保持一致,否则很容易导致数据错误无效。
CAD文件
CAD是工程制图常用的文件格式,一般是通过AutoCAD软件创建的,格式后缀一般为DXF或DWG虽然,在工程制图中也会应用到一些地理空间分析的算法,但是一般的地理空间分析工具对其支持非常少,在实际应用中也很少见。
标签和标记格式
当用arcgis或者QGIS等软件打开数据的时候,会产生相应xml结尾的文件,这就是一种最常见的基于标签的标记格式,XML格式,此外还有用作投影信息文件的WKT格式,google earth常用的KML文件格式,以及GPS中常用的GPX文件。 标签和标记格式的文件一般具有可读性高,编辑方便,兼容性和扩展性较好等特点,但数据的存储比较低效,在数据庞大的情况下,编辑体验非常糟糕。
GeoJSON文件
GeoJSON文件是基于Javascript对象表示格式的一种新的、智能化的文本格式,已被主流的地理空间软件和大部分网站发布数据所采用,因为Javascript是动态网页支持的语言,GeoJSON能够和Javascript无缝集成。 GeoJSON和python的字典和列表等数据类型几乎一模一样,python内置的json库,可以直接解析JSON文件
这就定义了一个包含一个点的GeoJSON文件,可以直接赋值给python的数据结构。由于结构紧凑,使用Javascript语法编写对于互联网格式友好,并且支持主流编程语言,GeoJSON也是当前流行的地理空间REST Web API的一个重要组件。
栅格数据是由若干行或列的单元或者像素构成的,每个单元代表一个数值。地理空间栅格数据常用来存放卫星遥感数据,使用一个像元对应的地面距离来表达空间分辨率;此外栅格数据可以包含多个光谱波段的数据,例如常用的可见光以及红外波段,有的像高光谱数据,会包含成百上千个波段数据,可以通过不同波段的组合生成不同的专题地图。 栅格数据另外一种常见的应用是科学计算,例如HDF数据以及气象中常用的NetCDF,GRIB数据等,这些格式更像是文件系统中的字典,并且包含多个数据集或者相同数据集的多个版本。 和矢量数据类似,栅格数据也包含多种格式,比较常用的开源栅格库是地理空间数据抽象库(GDAL),支持超过130种栅格数据格式。常用的栅格数据格式包括:
TIFF文件
标记化图片文件格式(TIFF)是地理空间最常用的栅格格式。TIFF文件可以包含多波段,整型高程数据,基本元数据,内部压缩以及其他常用的存储辅助信息的文件格式。TIFF文件可以通过添加标记数据进行扩展,GeoTIFF就是扩展定义的地理空间数据的存储,常用的后缀.tif,.tiff和.gtif。
JPEG,GIF,BMP和PNG文件
JPEG、GIF、BMP和PNG格式是很常见的图片格式,但是一般来说,他们也可以存储基本的地理空间数据。通常这些格式依赖于相关的地理参考信息的辅助文本文件才能够在GIS软件中使用,例如WKT,prj等文件。
压缩格式
地理空间栅格数据往往占用的空间比较大,需要采用高级的压缩算法进行存储。最新的开放格式是JPEG2000,包含小波压缩算法和地理参照数据。多分辨率无缝影像数据库(MrSID).sid和增强型小波压缩.ecw是地理空间分析应用中常用到的两种小波压缩格式。TIFF格式支持的压缩算法包括Lempel-Ziv-Welch算法。压缩算法节省了数据的存储空间,但数据本身会被修改,丢弃了部分原始数据信息,因此在做分析中需要注意。
ASCII格式
ASCII网格文件就是将栅格数据存放在一个文本文件中,包含数据本身和数据的信息,通过文件头,读取数据。文件头基本包含行列数,起始坐标,单位,无效值的定义等信息
全球文件
世界文件由一些简单的文本构成,能够以外部文件的形式提供地理空间参考信息,世界文件结构非常简单,常包含的信息包括:•x方向单位大小•y轴偏转角的•x轴偏转角度•y方向单元大小•左上角x坐标•左上角y坐标 通过世界文件提供的信息(常用的6要素),可以计算坐标系内任意单元的坐标,从而获取文件的地理参考信息。
除了矢量和栅格数据外,地理空间数据还有其他形式例如:
•点云数据:点云数据根据物体表面的反射能量获取相应的三位坐标信息。一般通过激光器,雷达波,声学探测仪以及其他波形设备获取。目前常用到的场景包括全球地形绘制以及智能驾驶的距离探测,常用的格式LIDAR交换格式(LAS)•Web服务 地理空间Web服务允许用户执行数据发现,数据可视化和数据跨平台访问等操作。常用的协议有返回一张地图图片的网络地图服务(WMS)和返回GML格式文件的网络要素服务(WFS),目前天地图提供了多种Web服务,可以去尝试
python是一门非常强大的编程语言,对于地理空间分析方面的应用有多种包提供支持,常见的python
python的标记、标签解析器
python的minidom模块是一个历史悠久、简便易用的XML解析器,它能够解析XML文件并且可以把XML源当作数据串处理。适用于处理XML,KML格式的数据。
可以获取kml文件的标签,坐标信息。 此外python中也提供了元素树(ElementTree)解析XML的工具,允许使用路径样式的语法对XML文档进行查询。
minidom和ElementTree能够解析处理结构完好的XML文档,但是并不是所有的XML文档都是规范的。BeautifulSoup模块主要用来处理格式错误的XML文件,也可以解析HTML文件
此外,WKT也是周婵次常用的表达几何图形和空间索引的标记文本文件,读写WKT格式最佳的是使用Shapely库
这就定义了一个多边形的几何图形,此外利用OGR也可以处理wkt文件。
python的JSON库
javascript对象标记是目前非常流行的一种数据格式,python也提供了读写JSON文件的库。 可以通过eval函数直接解析为python中的字典的数据形式,但是eval并不能支持所有JSON中的字符集,因此并不是一种可靠的处理方式。 python标准库中提供的json模块可以提供可靠的JSON文本解析处理。
此外,geojson库可以更好的支持geojson文本的解析
OGR库
OGR库是python处理矢量数据的通用库,也是许多处理矢量数据包的依赖项。
这个是OGR读取shp文件的简单示例
PyShp
PyShp是一个简单的完全使用python实现的包,主要用来读写shapefile文件,但是它并不能支持几何操作。
和上面一样,简单的读取shp文件的示例
dbfpy3
除了OGR,PyShp这种直接操作shp文件的库外,dbfpy3提供了直接处理shp文件中的dbf文件项的功能,更方便快捷。
对dbf文件进行读写和编辑
Shapely
Shapely在wkt操作中有了简单的演示,可以提供对矢量数据的读写,但是着重于对矢量数据的几何操作。
通过wkt,定义了一个多边形,计算多边形的面积;计算5个单位的缓冲区分析,并计算缓冲区的面积
Fiona
Fiona模块为OGR哭的数据访问功能提供了一套简洁的python api,大大提高了OGR库在python中的易用性。Fiona默认的输出格式是GeoJSON
GDAL
GDAL库是处理栅格数据的主流地理空间库,也是多种地理空间分析软件和程序包的栅格处理的基础包。
简单的读取栅格文件的示例 此外可以结合其他模块进行交互处理。 依赖与numpy库可以读取遥感图像为数组,方便处理。
读取遥感图像的第一个波段为数组,并存成jpg文件
PIL
PIL库原本是用来处理遥感影像数据的,但现在一般用于图像编辑,PIL库有点庞大,如果只是轻量级处理图像,可以使用PNGCanvas库进行代替。
GeoPandas
GeoPandas是由Shapely,Fiona,PyProj,matplotlib以及其他必需的库一同构建的Pandas的地理空间扩展。下面的示例将会打开一个ShapeFile文件并将其转存为GeoJSOM格式,之后使用matplotlib库创建地图
Spectral Python
python的光谱功能包,是一个专门处理遥感波段数据的高级光能包,适用于高光谱处理方面的应用。