编辑推荐
适读人群 :学生、设计师 基于ArcGIS的地理信息系统可以辅助规划师从地理信息角度解决相关的规划设计问题,例如从信息化角度智能化管理城市信息数据,进行相关的空间分析、网络分析、地统计以及辅助制图。然而规划师的欲望是无止境的,寻求更自由的计算机辅助规划设计的技术,以及获得更强解决问题的能力,就需要具备编程设计的知识。基于ArcGIS的Python脚本语言正是可以辅助规划师得以自由解决问题的一个途径。
具有编程能力的规划设计师将具有更强解决问题的能力以及拓展无限的创造力,自身的专业知识为如何编写程序解决问题提供了最为直接的基础,这是专业开发人员力所不能及。针对Python 编写程序处理地理信息系统不仅提高了处理地理信息数据的效率,更是可以针对需要解决的问题构建处理问题的程序,从程序编写的角度思考解决问题的方法。
《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》为规划师提供了学习基于ArcGIS的脚本语言Python教材,将对Python语言的讲述与ArcGIS的模块ArcPy相结合,并通过实际案例探讨“自然村落选址因子权重评定的遗传算法”、“基于景观感知敏感度的生态旅游地观光线路自动选址”和“解读蚁群算法与TSP 问题”,理解编程规划设计的方法。
内容简介
《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》对于ArcGIS 下Python 脚本使用方法的阐述是从Python 语言本身和基于ArcGIS的Python 两个方面同时着手,因此在阅读本书时不需要预先具备Python 基础知识。本书包括七个部分,Python 与ArcGIS,ArcGIS 下的地理数据与Python 数据结构,Python 的基本语句与使用Python 访问地理数据,创建函数与使用Python 处理栅格数据,创建类与网络分析,异常与错误,以及程序的魅力。主要阐述的逻辑线存在并行的两条线,一个是针对Python 的,从对于Python 介绍、数据结构、基本语句到创建函数、创建类和异常;另一个是针对ArcGIS 下的Python ,从ArcPy 站点包、访问以及管理地理信息数据的方法、处理要素类、处理栅格数据到网络分析和与地理处理模型的结合方法。两条线同时推进阐述,互相支持印证,并结合实际解决问题的应用方法,例如如何转化KML 文件和.dwg 格式文件并增加字段数据,以及适宜性分析栅格计算重分类的方法和寻找最近设施点的网络分析,遗传算法应用等。
最后一部分则通过具体的案例来阐述应用ArcGIS下Python编程规划的方法,初步包括三个课题的探讨:
“课题探讨_A_ 自然村落选址因子权重评定的遗传算法”,村落选址受制于山水,如何在复杂的地形中谋得栖身之所,避免自然灾害的侵扰并具有舒适宜人的小气候是人类不断探索的课题。根据假定既有村落选址的特点反推权重设置具有一定的合理性,并根据反推的权重应用于影响因子计算新的地块获取选址。在这个过程中,使用优化算法中的遗传算法求解;
“课题探讨_B_ 基于景观感知敏感度的生态旅游地观光线路自动选址”,根据《基于景观感知敏感度的生态旅游地观光线路自动选址》的研究,将计算模型程序化,不仅提升模型计算的效率,更有利于不断修正研究过程中出现的问题以及加入更多不同类型影响因子后,进行综合性评价分析,并为类似的研究提供基础性程序片断;
“课题探讨_C_ 解读蚁群算法与TSP 问题”,蚁群算法(Ant Colony Optimization, ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型算法。本案例将蚁群算法在ArcGIS的Python脚本中实现。
作者简介
包瑞清,西安建筑科技大学建筑学院讲师
城市规划与设计专业博士,任教于西安建筑科技大学建筑学院,主攻计算机辅助设计应用研究,从作为设计者的角度寻找和融合编程与建筑、风景园林、城乡规划等设计规划学科之间的关联,建立面向设计师的编程设计知识系统,力图使编程设计成为设计领域的基础环节,探索未来设计的方法。
2012年,作为caDesign设计创始人之一,以“编程让设计更具创造力!”的信念为指引,分享研究成果,发展面向设计师的编程设计知识系统网络服务体系。
内页插图
目录
9 Python 与ArcGIS
10 1 Python
12 2 将地理信息系统作为过程的空间分析
12 2.1 区位与网络结构
14 2.2 调研者路线
16 2.3 场地现状信息录入与基本分析
18 2.4 基础的数据地理信息化辅助规划设计分析
21 2.5 专题地图叠合的方法
21 2.6 作为过程的空间分析
23 3 Python 与ArcGIS
25 3.1 .kml 文件格式
41 3.2 通过Python 使用工具箱里的工具
44 3.3 通过Python 使用环境设置
46 3.4 通过Python 使用函数
47 3.5 通过Python 使用类
51 3.5 获取和设置参数
57 ArcGIS 下的地理数据与Python 数据结构
58 1 ArcGIS 下的地理数据
62 1.1 文件地理数据库和个人地理数据库
62 1.2 ArcSDE 地理数据库
67 1.3 创建地理数据列表
74 2 Python 数据结构-List 列表、Tuple 元组与Dictionary 字典
75 2.1 列表(List)
85 2.2 元组(Tuple)
85 2.3 字典(Dictionary)
94 3 Python 数据结构-String 字符串
94 3.1 字符串格式化
96 3.2 re(regular expression) 正则表达式
109 Python 的基本语句与使用Python 访问地理数据
110 1 描述数据
112 2 Python 的基本语句
112 2.1 print() 与import
113 2.2 赋值的方法
114 2.3 循环语句
117 2.4 条件语句
119 3 Table 属性表与Cursor 游标
123 3.1 读取几何、写入几何与几何标记(geometry tokens)
126 3.2 游标和锁定
127 3.3 在Python 脚本中使用SQL 结构化查询语
129 3.4 数据存在判断与在Python 脚本中验证表和字段名称
135 创建函数与使用Python 处理栅格数据
136 1 创建函数
145 2 形式参数的传递
147 3 Raster 栅格数据
148 3.1 栅格数据(Mesh 面Quad 类型)
148 3.2 专题数据
148 3.3 影像数据
152 3.4 栅格函数
153 3.5 TIN 表面模型(Mesh 面Triangle 类型)
155 4 使用Python 处理栅格数据
155 4.1 栅格计算(地图代数运算)
159 4.2 重分类
171 4.3 条件分析工具集
175 创建类与网络分析
177 1 创建类
179 2 网络分析
180 2.1 从GoogleEarth 中调入路径以及服务设施和源点
185 2.2 建立文件地理数据库、要素数据集并导入用于网络分析的基础数据
187 2.3 最近设施点分析
193 异常与错误
194 1 异常
196 1.1 Python 内置异常
197 2 错误
201 程序的魅力
201 1 课题探讨_A_ 自然村落选址因子权重评定的遗传算法
204 1.1 准备数据
204 1.2 确定研究区域
205 1.3 确定影响因子
209 1.4 假设权重,叠合相加各个影响因子的成本栅格
211 1.5 遗传算法
218 1.6 将计算结果应用于类似场地
219 2 课题探讨_B_ 基于景观感知敏感度的生态旅游地观光线路自动选址
220 2.1 技术线路与基础数据
223 2.2 视域感知因子_ 可视区域计算
231 2.3 视域感知因子_ 最佳观赏距离计算
242 2.4 视域感知因子_ 最佳观赏方位
249 2.5 视域感知因子_ 栅格叠加求和
249 2.6 生态感知因子_ 景观类型
251 2.7 生态感知因子_ 资源价值
252 2.8 生态感知因子_ 栅格叠加求和
252 2.9 景观感知敏感度
254 2.10 地形因子
256 2.11 观光线路适宜性成本栅格计算
257 2.12 观光线路自动获取
260 3 课题探讨_C_ 解读蚁群算法与TSP 问题
260 3.1 蚁群算法与TSP 问题概述
263 3.2 蚁群算法程序解读
271 3.3 蚁群算法在ArcGIS 下的应用
274 4 分享程序
精彩书摘
GIS 辅助规划设计无限拓展的途径
GIS(Geographic Information System) 地理信息系统在城市规划、生态规划、风景园林规划行业中具有举足轻重的价值。但是GIS 应用领域的广泛性与无限拓展的知识领域使得规划设计者在开始地理信息领域探索时总是无所适从,往往被淹没在浩瀚的知识领域中。实际上对于不同的专业领域,在使用GIS 协助规划设计时,会根据自身的需求选择适合的知识方向和内容,从而找对方向点便于顺利切入。GIS 技术不应该仅仅成为专业GIS 开发者的工具,更应该是规划设计者需要掌握的基础知识。在实际规划设计过程中,将传统的规划设计方法向地理信息系统方向转化,从地理信息的角度管理、分析、研究、规划设计项目,在一定程度上地理信息系统成为规划整个流程的基础框架,所有的规划内容从地理信息数据的录入与管理、对于地理信息数据的分析研究开始,从基于数据的本质内容规划。
从地理信息系统角度切入规划设计的方法主流是使用ArcGIS,由ESRI 出品的一个地理信息系统系列软件的总称。ArcGIS 提供了丰富的地理信息数据管理和分析的工具,同时在不断地拓展,并可以在地理处理中构建地理处理信息模型,流程化处理地理信息数据,然而当需要批处理地理信息数据,或者现有的ArcGIS 中的地理处理工具不能够满足分析研究的需求时,最直接的方式是使用程序语言自行编写工具达到分析研究的目的。ArcGIS 已经开始支持并不断拓展Python 支持的力度,从Python 语言自身发展的历程和针对建筑、规划设计行业三维软件平台越来越多的支持,Python 必然成为针对规划设计者的程序语言。ArcGIS 逐步地发展了ArcPy 站点包,提供使用Python 语言操作所有地理处理工具(包括扩展模块)的入口,并提供多种有用的函数和类,以用于处理和询问GIS 数据。使用 Python 和ArcPy,可以开发出大量用于处理地理数据的实用程序。
程序语言在辅助规划设计领域的优势逐渐凸显,对于规划设计方法更高级技术的追求必然对规划设计者提出新的具有挑战性的要求。编程语言的逐步发展和成熟为相关专业学科的发展奠定了坚实的基础,然而由于编程语言发展阶段的历史原因,大部分规划设计专业的院校并没有开设编程语言课程和针对规划设计领域的编程语言课程,因此大部分规划设计者并不具有通过编程处理问题的能力。具备编程能力并不只是针对专业开发人员的基本要求,规划设计者应该成为具有编程能力的规划设计者,从而更加自由并从全新的视角审视与解决问题,而不必求助于专业开发人员。具有编程能力的规划设计者将具有更强解决问题的能力以及拓展无限的创造力,自身的专业知识为如何编写程序解决问题提供了最为直接的基础,这是专业开发人员力所不能及。针对Python 编写程序处理地理信息系统不仅提高了处理地理信息数据的效率,更是可以针对需要解决的问题构建处理问题的程序,从程序编写的角度思考解决问题的方法。
本书对于ArcGIS 下Python 脚本使用方法的阐述是从Python 语言本身和基于ArcGIS的Python 两个方面同时着手,因此在阅读本书时不需要预先具备Python 基础知识。本书包括七个部分,Python 与ArcGIS,ArcGIS 下的地理数据与Python 数据结构,Python 的基本语句与使用Python 访问地理数据,创建函数与使用Python 处理栅格数据,创建类与网络分析,异常与错误,以及程序的魅力。主要阐述的逻辑线存在并行的两条线,一个是针对Python 的,从对于Python 介绍、数据结构、基本语句到创建函数、创建类和异常;另一个是针对ArcGIS 下的Python ,从ArcPy 站点包、访问以及管理地理信息数据的方法、处理要素类、处理栅格数据到网络分析和与地理处理模型的结合方法。两条线同时推进阐述,互相支持印证,并结合实际解决问题的应用方法,例如如何转化KML 文件和.dwg 格式文件并增加字段数据,以及适宜性分析栅格计算重分类的方法和寻找最近设施点的网络分析,遗传算法应用等。
结合规划设计专业阐述ArcGIS 下Python 编写处理地理信息数据方法的专著也许本书是国内第一本,难免存在不妥之处,敬请批评指正,从而逐步修正和完善。
……
前言/序言
面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程 数字时代的设计师,您是否渴望在空间数据处理与可视化领域拥有更强大的掌控力?是否希望将创意构想高效转化为精准的空间分析成果?《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》将是您开启这一旅程的理想指南。 本书并非一本枯燥的技术手册,而是专为渴望在GIS(地理信息系统)领域深化设计能力的设计师量身打造的实用知识体系。我们深知,优秀的设计不仅仅是美学的呈现,更是对数据逻辑的深刻理解和对工具的灵活运用。在当今数字化浪潮席卷的背景下,掌握编程能力已成为提升设计效率、拓展设计边界的必然选择。而ArcGIS作为行业内领先的GIS平台,其强大的功能与Python语言的灵活性相结合,为设计师带来了前所未有的创作可能。 为何设计师需要学习Python编程与ArcGIS? 在传统设计流程中,设计师常常依赖手动操作完成大量重复性的空间数据处理任务,这不仅耗时耗力,也容易引入错误。而Python作为一门易学易用的编程语言,其简洁的语法和丰富的库,能帮助您自动化繁琐的数据准备、分析和制图流程。结合ArcGIS强大的空间分析功能,您将能: 告别重复劳动,拥抱高效工作流: 通过编写Python脚本,您可以轻松实现批量数据裁剪、重投影、属性字段更新、空间连接等操作,将原本需要数小时甚至数天的工作量缩短至几分钟。想象一下,当您需要处理成百上千个地块的属性信息时,一个简单的脚本就能瞬间完成,让您有更多精力投入到核心的设计构思中。 实现定制化分析,挖掘数据深层价值: ArcGIS提供了丰富的分析工具,但有时您可能需要进行更复杂、更具针对性的分析。Python的灵活性允许您调用ArcGIS的分析函数,并结合其强大的数据处理能力,构建出满足您特定设计需求的定制化分析模型。例如,您可以开发脚本来模拟不同开发情景下的交通流量影响,或者评估不同区域的景观敏感度。 精细化数据可视化,提升设计表达力: 数据可视化是设计师传达信息、呈现方案的关键。Python不仅能与ArcGIS的制图功能无缝集成,还能利用matplotlib、seaborn等库创造出更为丰富、动态和交互式的数据可视化图表。您可以生成基于地理空间的数据热力图、密度图、网络分析可视化图,将复杂的数据关系以直观、引人入胜的方式呈现给客户和团队。 拓展设计边界,探索新的设计可能: 掌握编程能力,意味着您不再仅仅是工具的使用者,更能成为工具的创造者。您可以开发自己的ArcGIS工具箱,定制化的插件,甚至构建Web GIS应用,将您的设计成果以更具互动性和可访问性的方式呈现。这意味着您的设计将不再局限于静态的图纸,而是可以演变为动态的、可交互的数字体验。 本书内容亮点与价值 《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》旨在为您构建一个完整、系统的设计编程知识框架,让您从零基础快速上手,并逐步深入掌握ArcGIS与Python的结合应用。本书的独特之处在于: 以设计思维驱动学习: 不同于纯粹的技术教程,本书始终将设计师的需求和工作流程置于核心。我们从设计师最常遇到的问题和最感兴趣的应用场景出发,引导您学习相关的Python编程概念和ArcGIS功能。例如,在讲解数据连接时,我们会结合实际的城市规划设计案例,展示如何通过编程快速整合多源异构的地理空间数据。 由浅入深,循序渐进的学习路径: 无论您是否具备编程经验,本书都为您设计了清晰的学习脉络。从Python基础语法、数据结构,到ArcGIS的Python API(ArcPy)入门,再到具体的空间数据处理、空间分析、地图制图与数据可视化,每一个章节都建立在前一章知识的基础上,确保您能够稳步提升。 丰富的实战案例,直观的学习体验: 理论结合实践是本书的核心教学理念。我们精心设计了大量贴近实际设计工作的案例,涵盖城市规划、景观设计、环境评估、交通分析等多个领域。您将跟随案例一步步学习如何运用Python解决真实的设计问题,例如: 自动化地块分析: 编写脚本批量计算地块的面积、坡度、日照时长等,为方案选择提供数据支持。 优化交通网络设计: 利用ArcGIS的路径分析和网络分析工具,通过Python脚本模拟和评估不同道路布局对交通流量的影响。 创建交互式地图报告: 学习如何使用Python生成包含空间数据和图表的报告,并考虑如何进一步将其转化为Web端的交互式应用。 空间统计与模式识别: 探索如何使用Python进行空间自相关分析、聚类分析,以发现隐藏在地理空间数据中的设计洞察。 自动化地形与地貌可视化: 学习如何利用DEM(数字高程模型)数据,通过Python脚本生成三维地形图、等高线图,为景观设计提供基础。 深入讲解ArcPy API,解锁ArcGIS全部潜能: ArcPy是ArcGIS平台的Python接口,它使得您能够通过Python脚本调用ArcGIS中的几乎所有工具和功能。本书将系统地介绍ArcPy的核心模块,包括数据访问、地理处理工具、空间分析、地图自动化等,让您能够充分利用ArcGIS强大的空间处理能力。 精通数据表达与可视化,让设计更具说服力: 好的设计需要清晰有效的传达。本书将引导您学习如何利用Python和ArcGIS的制图功能,创建专业、美观且信息丰富的地图。从基础的符号系统设置、标注样式,到高级的地图布局设计、图层管理,再到动态可视化的探索,您将掌握将数据转化为引人入胜视觉叙事的所有技巧。 培养面向未来的设计思维: 在这个快速变化的时代,持续学习和适应新技术是设计师不可或缺的能力。《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》不仅教会您一项技能,更是为您打开了一扇通往更广阔设计可能的大门,帮助您建立面向未来的设计思维模式,成为具备复合型能力的设计领军者。 您将收获什么? 通过学习本书,您将能够: 显著提高工作效率,节省宝贵的设计时间。 深入理解空间数据,挖掘设计背后的逻辑。 掌握强大的空间分析技能,为决策提供科学依据。 创作更具创意和表现力的地理空间可视化作品。 提升在团队中的竞争力,成为更具价值的设计师。 为未来数字化设计领域的发展奠定坚实的基础。 本书适合谁? 城市规划师、景观设计师、建筑师: 希望通过编程提升空间数据处理、分析和可视化能力。 GIS从业者: 希望在设计应用方面深化Python技能,将其与ArcGIS结合。 对空间信息和数据分析感兴趣的设计领域学生: 希望掌握一项能够显著提升设计能力的硬技能。 任何希望在空间数据领域实现自动化、定制化工作流程的设计专业人士。 现在,是时候拥抱技术,革新您的设计方式了!《面向设计师的编程设计知识系统PADKS:ArcGIS下的Python编程》将是您在这个数字化时代脱颖而出的最佳伙伴。让我们一起,用代码赋能设计,用数据驱动创意,开启无限可能!