很值得一读的“空间数据科学”新书

我读书时候的专业就是GIS(地理信息系统)。可能是因为从小就喜爱地理,冥冥之中也是命中注定就把自己未来的事业托付给了这个最爱的信息系统。伴随着刚刚改革开放成长的那一代国人,能“读万卷书,行万里路”的人极少极少,几乎所有的诗和远方都来自地图上的想象。小的时候即便没出过门大概也猜得出,这个世界有很多美好的地方,但想象不出的是美好的地方如此之多。现在喜欢地理的孩子有多幸福,不说从小就可以走过很多好山好水,就是在网上信手拈来的美景就能醉倒一学校的人。“远方”没有那么多机会去,倒是因为专业和工作之故,为这些远方配的地图,我也能做得出,所以偷偷安慰自己:即便去不了现场,我在地图上畅想,也算是有本事的开心。

世界上最高的液压提升船闸——彼得伯勒(Peterborough)提升船闸,能将船只提升65英尺(19.8米)。这是一个环绕在无比宁静中的动力系统。图片来自国家地理《一生必游的500经典路线》
Peterborough整条水道,包括所有的运河和水闸,是19世纪工程的惊人壮举

以我在2000年初的学识和见识,是把GIS当做既跨界又颇为独立的领域知识在学习的。要说这个GIS的基础,应该算是在地理的范畴吧,学习GIS却又有很多数字图像处理的数学学问需要掌握;要说叫做信息系统的怎么也算作软件吧,GIS又要有支撑矢量、栅格、网络等空间运算等并非常规数据结构的知识;更不要说什么地统计、遥感影像的监督非监督分类、不规则三角网等再细化的技术了。那个时候在获取知识养料的过程中,兴奋、牛气,觉得自己的眼界真是扩大了好多,沾沾自喜的好像已经是个跨领域的知识工作者了。感谢学校的老师自是不必说,还要感谢的是esri为GIS的工作者们提供了那么多的学习资料,加上ArcGIS软件,真是无所不覆盖。

esri出版了大量的书籍

20年过去了,感觉每个行当都经历了一轮知识的更新和大迭代,当年神秘的阳春白雪早已是下里巴人的家常便饭,高级的知识也很平庸的变成日常谈资。知识的通俗化、普世化绝对是好事儿,更是大势所趋。高级的任何东西都会有内在的动力被更多的人享用,有时候只不过是变一个形式而已。对买不起爱马仕铂金包的女生,爱马仕会很“仁义”的让你来捡一条丝巾的便宜。当年只有在GIS软件和GIS课程中才有的专业名词,换了形式换了名头,被更多的软件工作者所掌握。

现在要做地图?稍微全面一点的可视化工具,都会有相关的组件,像我这样的科班学生讲究地图样式的规范,而在可视化工作者眼里,地图无非也是一种图表样式而已;要建空间数据库?几乎所有主流的开源闭源数据库软件都包含空间数据类型,和我类似的工程师习惯于用GIS工具软件处理的空间运算,在数据库工作者手中,通通都可以借助数据库的SQL;要进行空间分析?那就更不必说了,Python程序员能找来各式各样的包,借助着天南海北素味平生“道友们”的智慧,做到的分析叹为观止。

“时”已至此,跟着时代前行,本来就该随行就市。本文推荐一本能在Python下指导你大展拳脚做空间分析的好书:

书,肯定要自己读并且跟着操作才会有收获,本文只做内容简介和概要的梳理。 前三章介绍的是地理信息和遥感的基础知识,除了解释一些基本概念之外,还介绍了一些获取全球地理数据的网上资源及常见的桌面工具。第二部分是本书的重点:用Python做空间分析。 Python的一大优势就是第三方的资源多多。用于空间分析最常见的第三方库:

其中栅格分析(遥感影像)部分最重要的是GDAL,只要是涉及到遥感影像分析的程序开发,绝不可能错过。GDAL在Python中读写栅格数据的效率非常高,使用GDAL与Numpy很好的配合,能挖掘出很多遥感影像的独特价值,而不必受困于缺乏专业软件的技能。在全书的这一部分,分别列举了大量的实例来进行矢量数据、栅格数据和高程数据的处理、分析和输出。举例一段:

import os import folium from folium.plugins import HeatMap
f = open('bear_sightings.csv', 'r')
lines = f.readlines() lines.pop(0) data = [] bears = [list(map(float, l.strip().split(','))) for l in lines]
m = folium.Map([32.75, -89.52], tiles='stamentonerbackground',
zoom_start=7, max_zoom=7, min_zoom=7)
HeatMap(bears, max_zoom=16, radius=22, min_opacity=1, blur=30).add_to(m) m.save('heatmap.html')

用folium库做热力图。简单的六行代码,就可以输出成一个html网页的地图效果。(bear_sightings.csv文件在https://git.io/fjtGL.)退到十年前,做一个能发布到互联网上的热力图不知道得多麻烦。

Geocoding(地理编码,将文字地址转化为坐标)也是非常非常用的到的一项技术。在本书中,介绍了两个库Geocoder和geopy,当然如何做到批处理,遇到服务器Time out错误后如何跳过和报告这些错误,肯定也需要Python编程上的技巧。书中并不负责探讨Python编程本身。


第三部分介绍了几个高级一点的技能:包括运算遥感影像的NDVI、制作山影图、分析最低成本路线、水利中的淹没模型、路径分析、处理带地理标签的照片、遥感影像的云覆盖计算、实时(GPS)数据的处理等。最后用第一个如何开发完整的野外GPS与中心服务器协同汇报、量测、分析和调度的工具来将上文的基础概念、基本操作组装在一起,形成一个很有实际应用场景的系统。

总结:
这本书基本囊括了作为一个Python程序爱好者,希望掌握的几乎所有要成为现代地理空间分析人员所需的最基本的工具和技能。无论是偶尔工作用到地理空间数据,还是像我们极海小伙伴这样的专业工作者每天都要和数据处理、地图制作打交道,这本书涵盖的知识都可以帮助你更好地实践地理空间分析——这里面很多程序基础,是我们公司小伙们每天都要操练的。

眼前的食物,可能来自遥远的大海和高山。
----------------《舌尖上的中国》第二季

未来的技艺,一定也来自你今天的学习和探索。