《Python地理空间分析指南(第2版)》——1.10 GIS中矢量数据的基本概念

简介:

本节书摘来自异步社区《Python地理空间分析指南(第2版)》一书中的第1章,第1.10节,作者: 【美】Joel Lawhead(莱哈德) 更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.10 GIS中矢量数据的基本概念

本章将讨论地理空间分析领域中常见的各种GIS处理流程。这个列表虽不详尽,但是介绍的操作流程是其他操作的基础。如果你理解了这些操作,那么学习更复杂的操作时就能够触类旁通。

1.10.1 数据结构
GIS的矢量数据由坐标构成,通过水平方向的x值和竖直方向的y值来表示地球上的位置信息。多数情况下,一个点可能还包括z值。其他辅助信息可能包括测量值和时间戳。

这些坐标可以组成点、线、面等元素,从而对现实世界建模。点本身可以是一种几何特征,同时还可以组合成线段。由线段组成的闭合区域构成了多边形。多边形可以对多种对象建模,例如建筑物,地形和地区边界线等。

一个GIS特征可以是点、线和多边形,还可以是更复杂的形状。例如,在包含所有国家边界的GIS多边形数据集中,菲律宾是由许多个岛屿组成的,这意味着需要用几千个多边形表示一个国家。

矢量数据表示地貌特征的效果比栅格数据好。矢量数据精度高更准确。但是大规模的采集矢量数据的成本也远远高于栅格数据。

另外两个重要的矢量数据结构是边框和凸包。边框中的和最小边框是包含数据集中所有点的最小矩形。图1-10演示了包含一组点的边框。


<a href=https://yqfile.alicdn.com/53991cd8089a894cf46ed3474f868c30c5337f76.png" >

凸包的数据集和边框类似,但是不是矩形,它是包含数据集中所有点的最小多边形。数据集的边框通常也包含它的凸包。图1-11使用上一示例中相同数据集用红色演示了凸包多边形。


002bd75de7eb37615c973bb40230e119f1afbb87

1.10.2 缓冲区
缓冲区操作适用的对象包括点、线和多边形。该操作会在对象周围自动创建特定宽度的缓冲多边形。缓冲区分析常用于邻近分析,例如在危险区域周围建立一个安全隔离带。如图1-12所示,黑色形状代表原几何图形,外部红色部分是系统根据原图形生成的缓冲多边形。


b6693254bb99a520e1dc99c55c38e4292ebf0659

1.10.3 融合
融合操作为相邻的多边形创建一个更大的多边形,如图1-13所示。普通的融合操作常常是在税务数据库中合并同一纳税人的两个相似属性。融合也用于简化遥感影像数据。


3dfc0fde7c3a0c9662c0f4d2ce35c783e29ea31c

1.10.4 简化
很多构成对象的点对于地理空间分析建模来说都是不必要的,我们可以将其简化用形状代替,参见图1-14。这些操作通常需要在不影响整体形状的前提下设定构成点的最优值。它是一种提高数据计算和可视化效率的优化技术。这种技术对网络地图应用非常有用。一般的显示器的每英寸(1英寸=2.54厘米)点数(dots per inch,dpi)是72,更详细的数据点将不会被显示,因此可以通过数据优化,减少带宽传输,更快地将地图展现给用户。


<a href=https://yqfile.alicdn.com/1225bc965f642821cdc249edcf77e02439ec6a74.png" >

1.10.5 叠置
叠置操作用来判断某一特征是否和一个或多个特征重叠。这个操作常用于邻近分析中的空间查询,并且通常后续操作是缓冲区分析,如图1-15所示。


<a href=https://yqfile.alicdn.com/0bd530bafb3a2916b9f1783b3c1951f0ee1bb103.png" >

1.10.6 合并
合并操作将两个或多个非重叠的形状合并成一个复合形状对象。复合形状对象意味着这些形状虽然是独立的几何图形,但是在GIS系统中会被当作一个单一的属性集,如图1-16所示。


c7806dcf1735cec4e2f445e57ce31dd7e189d044

1.10.7 点包容性
一个基本的地理空间操作是检查一个点是否在多边形里面。这个操作是构建其他多种地理空间查询的基础。当点在多边形的边界时,也被看作是在多边形内部。几乎很少有空间查询操作不是基于这种检查判断的。但是当点的数目很大时,它的操作效率会变得很低。

通常,判断一个点是否在多边形内的最有效算法是光线投射法。首先,执行一个测试,检查该点是否在多边形的边界上。其次,从该点引出一根“射线”,与多边形的任意若干条边相交,累计相交的边的数目,如果是奇数,那么点就在多边形内,否则点就在多边形外,如图1-17所示。


02b8c92ce6f92deed61a8fc66f007dab05eeef22

1.10.8 联合
联合操作很少用到,但是在把两个或多个重叠的多边形组合成单一形状时非常有用。和融合类似,但是在这种情况下,多边形是重叠关系而非相邻关系,如图1-18所示。通常该操作是用来清理遥感操作自动生成的特征数据集的。


c3458c706058c50ea490312e1c6bfb46e5c6bf17

1.10.9 连接
一个连接或者SQL连接是数据库操作,主要用来合并两个以上的数据表。关系型数据库中的一对多关系是为了避免存储冗余信息而设计的。例如,美国的州可能有很多城市,我们不需要创建一个包含所有相关城市的州表,只需要创建一个包含ID的州表,然后将整个国家的城市表与州表的ID关联起来即可。在GIS中,你也可以在支持空间数据库的软件中使用空间连接。对于空间连接来说,将属性组合成两个特征的方法和SQL连接操作类似,但是它们的关系是基于相邻空间的两个特征。还是以前面的城市为例,我们可以使用空间索引为每个城市添加相关的县名。在包含县名的县一级的图层上叠加市一级图层,空间连接将决定市和县的从属关系,就像SQL连接中将县名添加到城市的属性列中一样。

1.10.10 地理空间中的多边形规则
在地理空间分析中,其中提到的多边形和数学描述的多边形有几个关键区别:

  • 多边形有且至少有4个点,第一个点和最后一个点必须重合;
  • 多边形不能和自身0重叠;
  • 图层中的多边形不能重叠;
  • 图层中的多边形在其他多边形中被当作多边形下面的一个洞来处理。

不同的地理空间软件遇到这些规则的问题时处理方式不尽相同,所以有可能会导致一些莫名其妙的错误和行为。最保守的做法是确保你的多边形都遵循了上述规则。多边形还有一条非常重要信息。那就是多边形的形状是闭合的,这意味着多边形的第一个点和最后一个点是相同的。如果你在多边形数据集中没有明确指定第一个点就是最后一个点,某些地理空间软件会抛出异常。其他软件会毫无怨言地自动将多边形闭合。存储地理空间数据的格式也许会说明多边形的定义法则。没有指定多边形规则的问题还处于灰色地带,但是将来某一天当你遇到无法轻易解决的问题时,这些规则肯定会有用武之地。

相关文章
|
19天前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
|
17天前
|
数据采集 分布式计算 大数据
构建高效的数据管道:使用Python进行ETL任务
在数据驱动的世界中,高效地处理和移动数据是至关重要的。本文将引导你通过一个实际的Python ETL(提取、转换、加载)项目,从概念到实现。我们将探索如何设计一个灵活且可扩展的数据管道,确保数据的准确性和完整性。无论你是数据工程师、分析师还是任何对数据处理感兴趣的人,这篇文章都将成为你工具箱中的宝贵资源。
|
1月前
|
传感器 物联网 开发者
使用Python读取串行设备的温度数据
本文介绍了如何使用Python通过串行接口(如UART、RS-232或RS-485)读取温度传感器的数据。详细步骤包括硬件连接、安装`pyserial`库、配置串行端口、发送请求及解析响应等。适合嵌入式系统和物联网应用开发者参考。
45 3
|
1月前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
28 1
|
1月前
|
数据采集 JavaScript 程序员
探索CSDN博客数据:使用Python爬虫技术
本文介绍了如何利用Python的requests和pyquery库爬取CSDN博客数据,包括环境准备、代码解析及注意事项,适合初学者学习。
76 0
|
1月前
|
数据采集 存储 分布式计算
超酷炫Python技术:交通数据的多维度分析
超酷炫Python技术:交通数据的多维度分析
|
1月前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
34 0
|
17天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
16天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
4天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
98 80
下一篇
DataWorks