《Python地理数据处理》——1.2 空间数据的类型

1.2 空间数据的类型

下面学习如何使用矢量和栅格这两类主要的空间数据。矢量数据由点、线、面构成,栅格数据像照片中的像素一样,是一个由二维或三维阵列组成的数据值。一个包含国家边界的数据集就是一个矢量数据。在这个例子中,每一个国家用一个多边形表示。使用线表示道路或者河流,使用点表示气象站的例子是其他类型的矢量数据表现形式。早期原始的地图,如那些画在洞穴墙壁上的,只表示了要素自身。晚些时候的地图中开始包含一些城市或者港口等感兴趣的要素,并进行标注,如图1.1所示的非洲西北部的航海地图。

https://yqfile.alicdn.com/a750eabd105a4f2e4ceae8f9aaf677b0fff10108.png" >

使用数字数据,可以将多个属性值附加到每个要素上,无论你是否有计划将这些信息展示在地图上,这都是一大优势。对于每一条道路,你可以存储它的名字、限速、车道数或者任何你能想到的信息。

为什么能够将属性进行存储如此有用呢?在众多的原因中,最明显的一个就是可以根据它的属性进行要素标注。地图中显示国家边界的同时可以显示国家名称。所有的数据还可以帮你制作更有意思的地图,甚至可以讲述一个故事。地图中每个要素存储的人口数量,可以用来对各个国家进行专题符号化,所以你可以一眼看出哪些国家的人口最多。

使用矢量数据进行空间叠加分析也很简单。例如,想知道维多利亚湖在乌干达、肯尼亚以及坦桑尼亚的百分比,可以根据地图一直瞎猜,但也可以使用GIS软件来获得更精确的数值。读完本书,你将学会做类似的简单分析。

要素中附带的属性值还可以用于空间操作。假设你有一个包含水井位置信息的数据集,每一个水井具有井深和流量属性。你还有一个同一区域,包含地质地貌或土壤类型的数据集,你可以分析这些数据,看看水井流量或者所需的井深是否受到地形或者土壤类型的影响。

和早期的制图师不同,你还可以利用栅格数据。栅格数据是数据集的统称,是一个由二维或三维阵列组成的数据值,正如一张照片是一个由像素值构成的二维数组。事实上,图1.2所示的航空相片就是一种普遍使用的栅格数据类型。卫星相片看起来与之相近,只是它们通常分辨率较低。卫星相片最酷的是,大多数卫星相片是由不可见光进行采集的,所以它可以提供一张普通照片不能提供的信息。

栅格数据集非常适合表示连续的数据,不仅是照片。图1.3所示的降水数据就是一个很好的例子。降水通常不会突然停止在一个边界,所以很难围绕它画一个多边形。相反,统计一个网格单元内的降雨量就很简单,而且可以较简单地记录不同区域的变化。同样的思路也适用于温度数据和其他变量。另一个例子是数字高程模型(Digital Elevation Model,DEM),每一个像素都包含一个高程值。

对于一些不同类型的分析,栅格数据比矢量数据更合适。卫星影像和航空照片常常被用于植被制图的相关任务中。因为水往低处流,所以可以使用高程模型来确定集水区的区域边界。即使对栅格数据只做简单的数学运算,也能进行有用的分析操作。例如,一个波长值与另一个波长值的简单比例可以帮助识别植被的健康情况或者测量土壤中的水分。

相邻像素值构成的区块也可以用来计算有用的信息。例如,可以使用DEM高程数据计算坡度,然后可以用于径流分析、植被制图或者规划一个滑雪胜地。但要计算坡度,你需要获得周边像元的高程值。在图1.4中,你可以使用展示的9个像素值来计算中心像素的坡度。对于其他像素,你也需要它周围的9个像素值来计算自身的坡度。这些像素的集合被称为窗口,你可以通过在栅格数据上移动视窗来确保每一个像素都在其自身视窗的中心,进而执行许多其他种类的分析。

https://yqfile.alicdn.com/34250257d0eac4c6e885646caee95cc42546f456.png" >

矢量数据和栅格数据也可以一起使用,想象在一个混合的网络地图应用中,使用影像栅格数据作为底图,在其上面绘制道路矢量数据。图1.5展示了一个用大峡谷的DEM高程数据作为底图,并在其上绘制显示矢量线数据集的简单实例。

https://yqfile.alicdn.com/95d873a6ce748866a2987bde1c97d43b8f54acb7.png" >

时间: 2024-11-08 22:25:36

《Python地理数据处理》——1.2 空间数据的类型的相关文章

《Python地理数据处理》——1.3 地理数据处理

1.3 地理数据处理 地理数据处理是处理空间数据的总称,不管处理的是栅格数据,还是矢量数据.可以想象一下,地理数据处理的覆盖面相当广泛.我一直认为,使用GIS的地理数据处理工具就像做数据统计一样,几乎可以应用于所有事情中,甚至在日常生活中也会用到地理数据处理,不管你是否意识到这一点.例如,我会根据是开车还是骑自行车来选取不同的出行路线,当我骑自行车上班时,我会选择避开没有护栏的高流量道路.对于有陡峭山坡的路线,开车时我不会顾虑太多,但骑自行车时就会比较关心.像这种基于上班所做的路线选择,不仅考虑

《Python地理数据处理》——导读

前言本书可以帮助你学习使用地理空间数据的基础知识,主要是使用GDAL / OGR.当然,还有其他选择,但其中一些都是建立在GDAL的基础之上,所以如果你理解了本书中的内容,就可以很轻松地学习其他知识.这不是一本关于地理信息系统或遥感的图书,虽然其中解释了一些相关的背景理论.相反,本书将教你如何编写用于操作和创建空间数据的Python代码以及一些简单的分析案例.你可以使用这些构建块来实现自己设计的.更复杂的分析.前言 [第1章 引言 1.1 为什么使用Python和开源工具](https://yq

《Python地理数据处理》——第1章 引言1.1 为什么使用Python和开源工具

第1章 引言 本章内容 介绍空间数据的基本类型 什么是地理处理 QGIS软件的使用 人类制作地图的历史远比我们开始写作的时间久远,法国著名的拉斯科岩洞壁画上就有一幅星空图.古时候,世界各地的人们都曾使用过地图,如巴比伦人.希腊人和中国人.制图的艺术在这数千年中也在不断发展演化,从最初将洞壁岩穴作为介质,到后来将泥土沙盘.羊皮纸.纸作为介质,再到现在的电子地图.随着技术的发展和进步,地图上所包含的细节越来越多,每个要素也越来越精确.事实上,因为最早期的地图结构简单,大多数人可能很难将其作为真正意义

《Python地理数据处理》——1.5 小结

1.5 小结 Python是一种功能强大的跨平台编程语言,比较容易学习. 免费和开源的软件不仅价格是免费的(免费软件),而且还给你充分应用它们的许多自由(开源软件). 存在许多用于处理矢量和栅格地理空间数据的优秀开源Python模块. 使用开源工具并不会降低你的软件品质,事实上许多代码包也被应用于专有软件.

《Python地理数据处理》——2.7 类

2.7 类 通读本书时,会遇到有其他数据和附有函数的变量,这些对象创建自类.虽然我们不会在这本书中讲述如何创建你自己的类,但需要知道它们,因为你会用到别人定义好的类.类是一个非常强大的概念,但在本书中你只需要理解它们是可以包含内部数据和函数的数据类型.对象或该类型的变量包含这些数据和函数,而函数在特定对象上运行.你已看到了几种数据类型,例如列表.可以有一个列表类型的变量,而该变量包含了列表类型所有的函数,如append函数.当在列表中调用append函数时,它只将数据追加到特定的列表,而不是其他

《Python地理数据处理》——2.3 变量

2.3 变量 除非你的脚本非常简单,否则运行时将需要某种方式来存储信息,这就是变量发挥作用的地方.想一想当你使用软件打开一个文件时发生了什么,不管它是什么样的文件,该软件都会显示一个打开对话框,你需要选择一个文件,然后单击"OK"按钮,随后该文件被打开.当单击"OK"按钮,选定的文件名称将被存储为一个变量,以便该软件知道什么文件被打开.即使你一生中从未编写过任何程序,在数学意义上你也可能会熟悉这个概念.回想一下代数课,其中根据x的值计算y的值,x变量可以是任何值,相

《Python地理数据处理》——1.4 探究数据

1.4 探究数据 使用Python的过程中会看到多种可视化数据的方法,但探究数据最好的方法仍然是使用桌面端的GIS程序.在桌面程序中,你可以轻松地对空间数据进行可视化,并查看数据的属性信息.如果你目前还没有安装GIS软件,开源GIS软件里的QGIS是一个很好的选择,而且在本书中需要的地方将会被用到. 可下载的代码和样例数据 本书例子中涉及的代码和样例数据都可以通过下面的链接地址下载获得.如果想边学边练,需要下载这些内容. 代码包含本书中的实例和所用到的个人设置,实例中用到的所有数据都包含在内.

《Python地理数据处理》——2.2 一个脚本的基本结构

2.2 一个脚本的基本结构 在绝大多数Python脚本的顶端,你第一眼看到的是导入语句.这些代码意味着加载外部模块,以便脚本使用.一个模块是一个基本的代码库,你可以在脚本中访问和使用,并且大型的专业模块生态系统是Python的另一个优势.如果没有外部模块支持,在Python中处理GIS数据会很困难,其中道理类似GIMP和Photoshop等工具便于处理数字图像.本书的目的是教你如何使用这些工具处理GIS数据,在这个过程中,你也将利用一些Python自带的模块.对于处理文件系统这种任务而言,这些模

《Python地理数据处理》——2.8 小结

2.8 小结 Python解释器对于学习程序是如何运行或尝试编写少量代码很有用,但在脚本中编写多行代码,运行效率会更高.另外,可以保存脚本并在以后使用它们,这是程序设计的一个主要原因. 模块是代码库,可以加载到脚本中使用.如果需要用Python做某事,不管想做什么,在某处可能会有一个内置模块帮你搞定. 习惯在变量中存储数据,因为它会使代码更容易适应后期的变更. Python有几个核心数据类型,针对不同的数据类型和不同的应用场景,所有的这些数据类型都极有用. 可以通过使用控制流语句根据不同的条件改