《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重叠;
  • 图层中的多边形不能重叠;
  • 图层中的多边形在其他多边形中被当作多边形下面的一个洞来处理。

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

相关文章
|
10天前
|
数据可视化 数据挖掘 定位技术
Python和Geopandas进行地理数据可视化
【10月更文挑战第22天】本文介绍了如何使用Python和Geopandas进行地理数据可视化和分析,涵盖从准备工作、加载数据、数据探索与处理、地理数据可视化、空间分析与查询到交互式地理数据可视化等内容。通过丰富的代码示例和案例演示,帮助读者掌握地理数据分析的基本方法,为实际应用提供支持。
50 19
|
25天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
10天前
|
图形学 Python
SciPy 空间数据2
凸包(Convex Hull)是计算几何中的概念,指包含给定点集的所有凸集的交集。可以通过 `ConvexHull()` 方法创建凸包。示例代码展示了如何使用 `scipy` 库和 `matplotlib` 绘制给定点集的凸包。
19 1
|
11天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
11天前
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
23天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
51 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
1月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
46 2
|
10天前
|
索引 Python
SciPy 空间数据1
SciPy 通过 `scipy.spatial` 模块处理空间数据,如判断点是否在边界内、计算最近点等。三角测量是通过测量角度来确定目标距离的方法。多边形的三角测量可将其分解为多个三角形,用于计算面积。Delaunay 三角剖分是一种常用方法,可以对一系列点进行三角剖分。示例代码展示了如何使用 `Delaunay()` 函数创建三角形并绘制。
19 0
|
4天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
4天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!