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

第1章 引言

本章内容

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

从洞穴墙壁上的刻画到大规模量产道路线图的转变,经历了很长时间,但是过去几十年的巨大变化的确令人惊叹。随着地理信息系统的普及以及更易使用,越来越多的人能够分析其空间数据,并制作出自己的高品质地图。随着网络地图以及网络地图服务的出现,用户可以在线制作自定义地图,并与世界各地的用户进行分享。我们中的大多数随身都带着移动设备,这些移动设备里安装的地图软件可以显示当前位置,并引导我们如何到达一家准备体验的新饭店。不仅如此,数据的可获得性也发生了巨大转变。早期的地图制作者如果了解到我们要把道路数据叠置在航空影像以及可通话GPS设备上时,将会十分震撼。

基于这些技术的进步,以及众多免费和开源的工具产品,你可以使用功能强大的软件来处理自己的数据。本书的目的主要是教你有关处理空间数据的基本概念以及如何通过Python编程语言和其他开源工具进行具体的操作。读完这本书,你将学会编写Python脚本来解决基本的数据分析问题,并获得解决更复杂问题的背景知识。

1.1 为什么使用Python和开源工具

使用Python和开源工具处理空间数据有以下几个令人信服的原因。首先,Python是一门功能强大的编程语言,与其他语言相比,它的优势是更容易学习,而且使用Python编写的代码也很容易阅读。如果你之前从未编过程序,这是一门很好的入门语言;如果你是从其他开发语言转变而来,你将会发现Python很容易上手。

学习Python是一个不错的选择,即使你读完这本书后不再用它进行空间分析,它依然是你编程时的绝佳之选。许多不同的Python模块可广泛地应用于众多的应用程序中,包括网络开发、科学数据分析和三维动画。事实上,地理空间应用程序只是Python众多应用中的一个很小的子集。

此外,Python是一门多平台语言,除非你使用的是限定于某个操作系统的特殊模块。你在一台机器上写的Python脚本可以在任何其他机器上运行,前提是脚本运行所需的模块已被安装。你可以在自己的Linux机器上开发一套脚本,然后将它们提供给使用Windows系统的同事,所有的脚本都应该可以正常运行。你只需要安装Python解译器运行代码,因为,这些主流的桌面操作系统都可以免费获得。

Python附带的核心语言包及众多的模块代码,都可以在自己的代码中使用。此外,还可以通过其他来源获得更多的模块代码。例如,Python包指数(PyPI),此网站上罗列了60000多种不同应用目的的扩展模块,而且全部免费。然而,这并不是说所有的Python模块都是免费的。有GIS背景的人肯定对ArcPy很熟悉,这是一个ArcGIS附带的Python模块,但如果没有ArcGIS许可授权,此模块是无法使用的。

Python不仅有大量免费的Python包,而且其中许多还是开源的。尽管一提到开源软件,大多数人就想到它们是不用花钱的,但这仅仅是开源的一部分含义。开源的真正意义是,如果你愿意,就可以获得源代码。你能访问源代码意味着没有任何东西是“黑盒子”(如果你想花时间一探盒子内部的究竟),你可以根据自己的需要修改这些代码,这才是极度的自由。我曾经使用过一个开源工具但它不能很好地满足我的需求,所以我就稍稍改进了源代码,经过重新编译,然后就有了一个能完全满足我需要的实用程序。而这对于专有软件是完全不可能的。开源软件自身具有的这两类自由特性,使其成为一种有吸引力的模式。

目前存在几种不同的开放源码许可类型,其中一些不仅允许你根据需要修改代码,还允许你售卖开发的衍生作品,而且不需要提供源代码和你所做的修改。其他许可要求如果你使用此开源软件,那么基于此开发的软件也必须开源。

在本书中,我们将介绍一些用于地理空间数据的、比较流行的开源Python模块。一些模块最初是使用其他语言进行开发的,但随着这些模块变得如此通用并为大家所重视,它们要么被移植到其他语言,要么用于研发相应的绑定模块,以便能够应用于其他语言。例如,地理空间数据抽象库(Geospatial Data Abstraction Library,GDAL)是一个用于空间数据读写的非常流行的C/C++库,针对Python、.NET、Ruby和其他语言进行了相应的绑定开发。GDAL库甚至还被一些专有软件包所使用。因为此模块库的广泛使用,所以这本书主要介绍GDAL/OGR。如果你能学会使用这个,那么再学习其他库也将不再困难。有几个基于GDAL/OGR开发的库很不错,而且使用简单,但是我们并不需要将GDAL中所有的功能都提供出来。查看附录A,可以了解本书中用到的模块安装说明。

使用开源工具的另一个优势是有一些模块包的活跃用户社区,你会发现社区里对bug和其他相关问题的解决速度要比许多专有软件包更快,你甚至可以通过电子邮件列表与这些库的实际开发人员讨论其中一些细节。

时间: 2024-12-26 10:26:26

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

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

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

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

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

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

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

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

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

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

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

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

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

《Python地理数据处理》——2.6 函数

2.6 函数 如果你发现会重复使用相同的代码,可以创建自己的函数并进行调用,而不是重复编写相同的代码.这使得事情变得更容易,也不容易出错,因为不可能有那么多的地方出现拼写错误.创建一个函数,需要给它一个名称,并告诉用户需要提供什么参数来使用它.让我们创建一个简单的函数来计算一个阶乘. **def factorial(n): answer = 1 for i in range(1, n + 1): answer = answer * i return answer** 这个函数的名字是factor

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

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

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

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