[译] 为什么我们需要关注PostGIS? - Part 0

允我心安 提交于 2020-01-24 01:52:57

原文链接:https://medium.com/@tjukanov/why-should-you-care-about-postgis-a-gentle-introduction-to-spatial-databases-9eccd26bc42b

 

【我的废话几句,可以直接略过】技术文章的翻译是个吃力不讨好的事情,大部分技术人员的英语水平都能够直接吃透原文。况且关于翻译,有句话深得我心:不能翻译的部分,既不是最好的,也不是最坏的。那为什么还要翻译这篇博文呢?这段时间查阅PostGIS的资料,发现资料虽多,但很少有行文流畅而且浅显易懂的。我试图翻译的这篇是我看过的质量最高的科普文,值得推荐。

原文标题:Why should you care about PostGIS? — A gentle introduction to spatial databases

 

为什么你需要关心PostGIS? —— 空间数据库的简介

 

数据库?木啥兴趣。

跟GIS或者数据可视化打交道的人可能这么想。我必须承认,数据库不是世界上最性感的玩意(得罪了,DBA们),但是如果你说要(或想要)对(空间)数据正儿八经地做分析或者可视化,你绝对不能忽略数据库。我希望这篇博文能够告诉你有效地使用空间数据库能够给你带来什么好处。

在IT行业,“网红”术语不停地出现然后消失。几年前的一个“网红”叫做“大数据”,但是现在慢慢褪去光环了。数据还是很大,事实上数据比以前更大了。文件尺寸在增长以致于在数据科学和地球科学领域的人们必须处理GB级别的数据。数据越大,我们越是要关心怎么存储数据,怎么分析数据。

 

这是数据库的用武之处。

在软件开发中数据库是必需的技术。但是对于计算机科学的其他子领域(例如GIS),数据库的必要性可能并不总是那么明显。当然,人们倾向于使用他们更熟悉的工具,虽然这不一定是达成目标的最高效方法。但是,有时候迈出你的舒适区能够给你带来大的裨益。我就是这般慢慢意识到空间SQL的潜力的。

 

图片1: https://miro.medium.com/max/1746/1*YIwx2jh66NdWqF-GpBTwCA.gif

【译注:因为图片尺寸问题,CSDN无法上传。各位同学请到原文围观,图片很靓,非常有看头】

巴西🇧🇷一周的航班。原始文件是一个包含起点和终点的CSV文件。我将它加载到PostGIS中,根据坐标值创建了一些点,然后在这些点之间创建了连线,最后使用QGIS Time Manager插件来可视化它们。

 

这篇博文的目标读者是那些用过空间数据但是还没有接触过PostGIS,或者是根本没听过它的人。我不打算讲解怎么安装PostgreSQL/PostGIS,我要讲的是它是什么和它的优势之处。

 

我的工作流和例子主要关注QGIS和PostGIS的组合,但是你也可以仅仅使用PostGIS,你的代码或其他的GIS客户端。

 

Post… what?

 

在我的GIS学习中我已经多次听说“PostGIS是Postgres数据库的一个空间扩展”,这不表示我明白这句话的意思。我不知道什么是Posggres,也不知道什么是空间扩展。

让我们尽量慢慢来,把它们讲得简单明了。

一些人可能讨厌我作对比,但是我还是得冒这个险:如果你从来没用过数据库,你可以认为数据库的表是很大很大的Excel文件,它能够用一毫秒就找到第433285行第3列的值。而且不用在单元格(cell)里写函数,你在SQL命令窗口里写这些函数。所以说数据库是一个你能够高效地存数据取数据的地方。

PostGIS是一个为PostgreSQL数据库管理系统开发的,开源的、免费的空间数据库扩展。也就是说,PostgreSQL (简写为Postgres)是数据库,PostGIS是这个数据库的一个扩展插件(add-on)。最新版的PostGIS安装包里边现在带有PostgreSQL数据库。【译注:这句话不一定正确,我在2019年12月下载的最新的PostGIS就没有带Postgres】

简而言之,PostGIS给PostgreSQL数据库添加了一些空间函数,例如distance, area, union, intersection以及特定的几何数据类型。空间数据库存储和操纵空间对象,就像存储和操纵其他数据库对象一样。

在一个普通数据库里,你存储不同类型的数据(数字,文本,时间戳,图像等等),在需要的时候你可以查询这些数据回答关于这些数据的问题,例如“有多少人登录你的网站了?”或者“网店有多少笔交易?”这样的问题。空间函数能够回答像“最近的商店有多远?”,“这个点在这个区域内吗?或者”这个国家的面积是多大?“这类的问题。

 

数据库里,数据存储为行和列。因为PostGIS是关于空间的数据库,它的数据有一个几何列,其中存储着特定坐标系下的数据。在PostGIS中,这个坐标系被SRID所标识。但是请记住虽然你主要用PostGIS存储空间数据,它也能存储非空间的数据,因为它也是一个完全功能的PostgreSQL数据库。

 

超赞的 Boundless PostGIS intro,【译注:该链接已经失效。我用最强大的搜索引擎找了一下,最靠谱的应该是这个https://gisforthought.com/projects/postgis_tutorial/】介绍了三个空间数据库的核心概念。这些核心部分组合起来,为性能和分析的优化提供了灵活的结构。

  1. 空间数据类型(Spatial Data Types) 例如点(point)、线(line)和多边形(polygon)。大部分处理空间数据的人都熟悉它们;
  2. 多维空间索引(Spatial Indexing)被用于空间操作的高效处理;
  3. 空间函数(Spatial Functions),承载于SQL,用于空间属性和关系的查询。

SQL, 或者”结构化查询语言“,是一种在关系型数据库中询问问题(asking question)或者更新数据的方式。一个select查询(你用来询问问题的)通常是下边形式的命令。

SELECT some_columns FROM some_data_source WHERE some_condition;

PostGIS特有的函数通常有这样的命名方式:ST_functionName

在登录你的数据库之后,或者在你的数据库图形工具(例如pgAdmin或者QGIS)中,你在命令行中写下这些命令。是的,SQL要求你真正地一些东西。用鼠标右键点点通常来说是被人低看一眼的,但对于一些不写代码的人来说,SQL是一个很好的入门之选,你能够用SQL写命令,以后或许用它写代码。

除了PostGIS之外还有其他的空间数据库。微软的SQL Server Spatial, ESRI的ArcSDE, 甲骨文的Oracle Spatial和GeoMesa是管理和分析空间数据的其他选择。但是据说PostGIS有着更多的功能,通常有更好的性能。另外一点,除了GeoMesa之外其他的产品都不是开源的。

如果你是小白,你现在可能有点懵逼了:就是说PostGIS是一个存数据的地方,你想要拿点信息你得在命令行上鼓捣点奇怪的东西才行?稍安勿躁。你如果真的想折腾PostGIS,这里还有一些实打实的好处。

我在推特上为这篇博文征求意见,得到了很多宝贵的反馈。有一个建议是将博文分为两个部分。在第一部分中我将讲述PostGIS能够给你日常工作带来的好处。在第二部分我重点讲述空间SQL。

【译注:博文有点长,一个上午才翻译这么一点点。姑且称为Part 0吧】

Part 1: 待翻译

Part 2: 待翻译

 

【广而告之】对地理信息系统开发感兴趣的同学们,欢迎加QQ群: 开源GIS技术交流群  群号:767137544 入群请注明:CSDN

QQ Group Image

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!