第九章 ArcGIS API for Python (5)

9.8 Starting the ArcGIS API for Python

从这一章开始就需要使用用户凭证等,如果不使用用户凭证,匿名登陆有部分资源无法使用。

首先导入arcgis

import arcgis

要注意的是,示例中省略了输入提示In[]和输出提示Out[],可以检查当前python版本和arcgis api;

import arcgis
import sys
print("Python version: "+sys.version)
print("arcgis api version:"+arcgis.__version__)

第九章 ArcGIS API for Python (5)_第1张图片
Python的ArcGIS API包括几个模块,其中最重要的是gis模块。gis模块允许管理gis的内容,以及用户及其角色。gis模块的主要类别是GISGIS对象表示通过ArcGIS Online或通过ArcGIS Enterprise实例使用的GIS,这个对象将成为使用ArcGIS API for Python的切入点。

要开始,请导入GIS类

from arcgis.gis import GIS

当使用from import导入GIS类时,一开始不需要使用import arcgis 。接下来,创建一个GIS对象

mygis = GIS()

GIS类有几个可选参数,包括URL、用户名和密码。 URL可以是ArcGIS Online的网址,也可以是本地门户网站,格式如下:https://gis.example.com/portal.如果这些参数为空,则表示您正在使用匿名登录ArcGIS Online。

图中显示了用于提供用户凭据的示例代码。
在这里插入图片描述
要创建Jupyter Notebook并使用ArcGIS API for Python,不需要提供用户凭据,使用将仅限于公共数据集。若要使用组织内托管的数据集,必须使用用户凭据进行身份验证。在使用ArcGIS Online门户时,API的某些功能使用credits,这也是身份验证可能是必要的另一个原因。

arcgis.GIS模块的GIS类的完整语法可以在在线API参考中找到,如下所示:

class arcgis.gis.GIS(url=None, username=None, password=None,
                     key_file=None, cert_file=None,
                     verify_cert=True, set_active=True,
                     client_id=None, profile=None, **kwargs)

Python的ArcGIS API文档中的语法符号与ArcPy文档中使用的符号略有不同。ArcPy的类和函数的可选参数用大括号{}括起来,而在前面的示例中,任何可选参数都被赋予默认值或初始化为None。列出的任何所需参数都没有默认值,但不需要GIS类的任何参数。还要注意,文档中的语法以关键字类开头,但在实际代码中没有使用。

结尾的**kwargs参数代表“keyworded”或命名参数,它们与前面的显式命名参数是分开的。使用**kwargs可以传递一个或多个附加参数。在GIS类的情况下,这些参数由代理服务器和令牌设置组成。

在帮助页面的“Working with Different Authentication Schemes”主题下,详细描述了验证用户凭据的其他方法。一个有用的替代方法是使用ArcGIS Pro应用程序中的活动门户进行连接,即所谓的pro验证方案,如下所示:

from arcgis.gis import GIS
mygis = GIS("pro")

只有在本地安装ArcGIS Pro并同时运行时,身份验证才有效。ArcGIS Pro中的凭据用于身份验证,而无需在代码中指定这些凭据。

下一步是创建一个基本的地图显示,以可视化您的空间数据。GIS对象包括一个用于此目的的地图小部件。小部件就像一个在笔记本电脑中运行的小型应用程序。Jupyter Notebook包括几个用于信息显示和用户交互的小部件,但地图小部件是作为arcgis包的一部分添加的。

mymap = mygis.map("Beijing")

这个小部件创建一个以提供的位置为中心的地图。还可以提供纬度和经度的坐标元组。当提供一般位置描述、地址或地标时,这些位置使用默认的地理编码器进行地理编码。如果您没有指定位置,地图小部件将返回世界地图。

可以通过键入地图小部件的名称来显示:
第九章 ArcGIS API for Python (5)_第2张图片
使用Jupyter Notebook的一个关键好处是,可以直接在笔记本中显示GIS的地图,并且结果会与代码交互更新。例如,可以使用地图小部件的basemap属性来更改basemap。

mymap.basemap = "gray-vector"

第九章 ArcGIS API for Python (5)_第3张图片

尽管Jupyter Notebook的使用相对直观,但在启动和运行时遇到问题是很常见的。使用地图小部件时,一个常见的问题是根本没有得到响应代码似乎已经运行,但没有显示地图,也没有错误消息,通常意味着您的浏览器出现问题。

您可以更改操作系统上的默认浏览器并重新启动Jupyter Notebook,也可以将命令提示符窗口中的URL复制到其他浏览器中。只是复制http://localhost:8888/tree还不够,您还必须复制令牌。其他常见问题是验证用户凭据的困难,因为存在几种不同的验证方案。如果您在本地安装了ArcGIS Pro,那么如果您保持ArcGIS Pro同时运行,pro身份验证是一个方便的解决方案。

9.9 Adding content

现在,已经启动并运行了Jupyter Notebook,并且可以使用arcgis软件包来显示简单的地图,现在是时候添加新内容了。示例使用一个新笔记本,并从不同研究区域的地图开始,
第九章 ArcGIS API for Python (5)_第4张图片

可以使用GIS对象的内容特性来搜索内容。content属性返回ContentManager类的一个实例。这个类的 search()方法定位感兴趣的项。到目前为止,代码行是:

search_result = mygis.content.search()

search()方法有查询的参数(作为字符串)、项的类型、项的最大数量以及其他几个参数。在原书的示例中,搜索的是 与纽约市出租车数据相关的特征层,并返回最多5个项目,结果是Item对象的列表。
第九章 ArcGIS API for Python (5)_第5张图片
这里搜索的学校,但是感觉结果不准确啊:

search_result = mygis.content.search("school","Feature Layer",max_items=5)
search_result

第九章 ArcGIS API for Python (5)_第6张图片

使用了匿名登录,因此结果由ArcGIS Online中符合搜索条件且公开可用的项目组成

项目可以是许多不同的东西,包括网络地图、功能服务、图像服务等等。每个项目都有一个唯一的标识码和一个众所周知的URL。通过将搜索限制为特定的项目类型,只会将这些类型作为列表的一部分返回。因为这些项是以Python列表的形式返回的,所以可以使用索引来获取特定项。查询单个项目时,将显示该项目的丰富表示形式,其中包括缩略图、简要描述、类型、修改日期以及指向门户网站上项目页面的超链接。
第九章 ArcGIS API for Python (5)_第7张图片

school_data = search_result[1]
school_data

第九章 ArcGIS API for Python (5)_第8张图片
在这种情况下,是一个要素图层集合,它可以包含一个或多个要素图层,特定要素图层集合包括四个要素图层。将此项目添加到地图小部件时,将添加所有这些层。您也可以使用索引来选择要使用的特定层,。

school_lyr = school_data.layers[0]
school_lyr

在这里插入图片描述
结果是单个特征层的URL。引用要素图层变量的第二行代码是不必要的,在本例中仅用于控制结果,现在可以使用add_layer()方法将特定层添加到地图显示中:可以看到中国内的搜索结果不是准确,也可能是账户问题或者我的操作。

第九章 ArcGIS API for Python (5)_第9张图片
可以使用arcgis.mapping模块的功能自定义添加到地图小部件中的图层的符号。
有关此功能的详细说明,要参阅ArcGIS API for Python的文档。

9.10 创建新内容

除了使用web GIS中已有的数据外,还可以通过将数据发布到GIS来创建新内容,下面的例子,使用一个新的笔记本,从加拿大不列颠哥伦比亚省温哥华市 Vancouver, British Columbia, Canada 不同研究区域的地图开始

在这里插入图片描述

但是由于该任务涉及将新项目发布到ArcGIS Online,因此仅进行匿名登录是不够的。为了使代码示例正常工作,必须使用具有发布者权限的ArcGIS Online凭据,或者使用专业身份验证方案,第二行代码中的URL、用户名和密码必须替换为您的凭据。
对于下一个示例,必须登录ArcGIS Online或门户网站才能发布项目,因为对结果进行地理编码需要积分。

本例中要添加的数据位于本地计算机上的CSV文件中,数据包括温哥华市超过100000棵行道树的位置。笔记本的目的是使用Pandas读取该数据集,然后将该数据作为新项目发布到ArcGIS Online。

导入Pandas后,通过读取本地CSV来创建DataFrame对象。为了方便发布数据的过程,为了便于说明,创建了100条记录的随机样本, sample()方法用于将此示例创建为新的DataFrame对象。为了检查笔记本内的数据,显示前五行:

第九章 ArcGIS API for Python (5)_第10张图片
数据集包括唯一ID、街道地址、纬度和经度的field,以及每棵树的描述性详细信息。因为要显示的列太多,所以前五行的显示包括一个滚动条来滚动列。

这个例子也说明了Pandas在Jupyter笔记本中使用时的多功能性。不仅可以轻松地从本地和在线资源中读取数据集,还可以直接在笔记本内显示数据样本。这个功能不同于其他IDE,在其他IDE中,结果通常在单独的窗口中查看,格式不太方便。

为了使属性更易于管理,将选择并组织最相关的field,结果作为一个新的DataFrame对象返回,如下所示。
第九章 ArcGIS API for Python (5)_第11张图片
一旦以DataFrame对象的形式获得了所需的数据集,下一步就是将数据作为特征集合导入。导入可以使用ContentManager类的import_data()方法来完成。该类的一个名为content的实例可以作为GIS对象的属性使用,DataFrame对象是import_data()方法的参数。

在这里插入图片描述

此处不需要第二行代码,用来确认结果是一个功能集合。

import_data()方法适用于Pandas数据帧或空间启用数据帧(SEDF)。SEDF是一类arcgis.features模块,用于赋予Pandas DataFrame空间能力。使用import_data()时,将Pandas DataFrame作为功能集合Item导入时,限制为1000行。使用SEDF时不适用此类限制,arcgis.features模块还包括将Pandas数据帧转换为SEDF的功能。

要在ArcGIS Online中将要素集合作为项目发布,必须将要素集合转换为JSON对象。为了实现这一点,特性集合被转换为Python字典,该字典在json.dumps()函数中用于创建json对象。
在这里插入图片描述
这个分析步骤是使用ContentManager类的add()方法将JSON对象发布为一个项。为了使发布的条目更可用,提供了几个条目特征作为字典,包括标题、描述、几个标记和类型。这些项目都不是必需的,但它们代表了良好的实践。在这种情况下,唯一需要的键是指定JSON对象的文本键。
第九章 ArcGIS API for Python (5)_第12张图片
此单元格中的分析代码行将显示已发布项目的快照。发布项目后,可以将其作为图层添加到地图显示中。另一种解决方案是首先t将CSV 文件作为项目发布在ArcGIS Online中,然后使用GIS对象的publish()方法将其发布为特征层。这个解决方案不需要使用Pandas,也不需要使用JSON对象将数据转换为特征集合,完整的代码解决方案显示为图中的单个单元格。
第九章 ArcGIS API for Python (5)_第13张图片
这个是替代解决方案,发布整个CSV文件,包括所有记录和所有字段。Pandas的使用提供了更多的可屏蔽性,因为它允许在发布数据之前进行数据清理和更改。
在这两种情况下,结果都是可以添加到显示中的主体要素图层。

第九章 ArcGIS API for Python (5)_第14张图片
arcgis.gis模块的ContentManager类中提供了许多其他方法。除了添加项目外,还有批量更新、克隆、创建服务、删除项目和共享的方法。

9.11 Performing analysis 部分

使用ArcGIS API for Python可以执行许多其他任务,包括地理编码、处理图像和执行网络分析。许多在本地数据上使用ArcGIS Pro和ArcPy的工作流可以使用ArcGIS API for Python为web GIS copy,而无需使用ArcGIS Online或Portal for ArcGIS的界面手动执行这些任务,这部分的重点是执行空间分析任务,这与在ArcGIS Pro中使用地理处理工具相当。

用于Python的ArcGIS API包括几个模块,用于执行专门的分析任务。这些模块包括用于光栅和图像分析的arcgis.raster模块、用于网络分析的arcgis.network模块和用于大型数据集分布式分析的arcpy.geoanalytics模块。一些更“基本”的分析工具是arcgis.features模块的一部分,用于处理向量数据集。

arcgis.geoprocessing模块主要用于将发布到web GIS的web工具作为Python模块导入。它不包括ArcGIS Pro中可用的地理处理工具,正如名称所暗示的那样。

你可能感兴趣的:(Arcgis,Pro脚本学习,arcgis,python,开发语言,ArcGIS,Pro)