ArcGIS API For Python 04 - 访问和创建内容

通过ArcGIS Online或者ArcGIS Enterprise,你可以拥有各种各样的地图、Web图层、分析工具、APP以及单独的文件。使用gis模块,你可以查询、访问和管理你的文件夹、内容,并且可以自动执行脚本程序等。

关于查询

在前几篇博客中,我们提到,Python API使用资源管理类(Resources Manager Class)来管理Web GIS中的用户、群组、DataStore和内容。可以通过访问GIS示例的属性usersgroupscontent来对应的获取UserManagerGroupManagerContentManager类。

这些资源管理类中的search方法表示ArcGIS RREST API中的search操作。search机制使用多种不同的输入来寻找可能的匹配项,对它们进行排序并返回适当的结果,这种结果是具有不确定性的。使用search可能不是查询特定项的最优方法,但可能是对一组项进行进一步筛选的最佳方法。

另外,使用Python API中的search与使用另外一种程序语言编写的search应用的结果可能不一致。不同的应用程序可能使用不同的输入。

  • 查询示例
from arcgis.gis import GIS
gis = GIS(url="https://singlega.jiaoxn.local/arcgis", username="esricd", password="12345678", verify_cert=False)
search_results = gis.content.search(query="owner:" + gis.users.me.username)
search_results
  • 查询建议

熟悉Python语法的朋友,可以使用Python的List来辅助增强search功能以实现更加精确的查询。

import datetime as dt

day_start = dt.datetime(2019, 5, 30, 0, 0, 0)
day_end = dt.datetime(2020, 5, 30, 0, 0, 0)

start_timestamp = int(day_start.timestamp() * 1000)
end_timestamp = int(day_end.timestamp() * 1000)

content_search_resulst = [item
                         for item in search_results
                         if item.created > start_timestamp
                         and item.created < end_timestamp]
content_search_resulst

查询内容

访问gis对象的content属性将会返回一个ContentManager类的实例。可以使用该示例的search方法在你的GIS中查询内容,对于匿名用户来讲,仅能查询ArcGIS Online中公开的内容。

search查询对象将会返回一组满足查询条件以及当前用户有权限访问的Item对象列表。

更多的查询条件可以查看这里

通配符查询

search方法支持通配符查询,其中*表示任意字符,?表示一个字符。

在门户外面搜索内容

当连接ArcGIS Online或者配置可访问ArcGIS Online的ArcGIS Enterprise时,你可以查询发布的和公共共享的内容,即便这些内容是其他Portal发布的。完成上述效果,只需将search函数的参数outside_org为True。

创建新的内容

可以通过访问ContentManageradd()方法来创建新的内容。同样,Python API没有直接创建ContentManager的实例,而是将其作为GIS对象的属性来实现的。使用这种方式创建的所有内容将会存放在当前登录用户的内容下。

import os

file_path = os.path.join("/opt/notebooks/Untitled Folder", "地级市点.csv")
csv_properties={'title':'Test',
                'description':'Measurements from globally distributed seismometers',
                'tags':'python'}
cities_csv_item = gis.content.add(item_properties=csv_properties, data=file_path)
cities_csv_item

add()方法将会返回一个arcgis.gis.Item对象实例,可在jupyter notebook中直接查看。

将内容项发布为Web图层

上面的示例演示了上传一个CSV文件到Portal中。像CSV文件、服务定义文件、File GDB、SHP和包(如tile、scene和vector tile包)等内容项均可发布成托管的Web图层,使用的方法是Item对象实例的publish方法。发布的Web图层的元数据使用其元数据的元数据(缩略图、标题和描述)。

cities_feature_layer_item = cities_csv_item.publish()
从Pandas数据模式中导入数据

使用Python API,你可以将Pandas的数据通过import_data()方法导入,其结果格式为arcgis.features.FeatureCollection。然后,你可以将其添加到你的GIS中。

  • 使用Pandas的iread_csv方法读取CSV文件数据
import pandas
ports_df = pandas.read_csv(file_path)
  • 使用import_data方法读取Pandas数据为FeatureCollection
ports_fc = gis.content.import_data(ports_df)

feature collection将会暂时保存在内容,其属性中包含了 图层定义信息和FeatureSet。接下来,可依据这些属性构建一个字典,如下:

import json
ports_fc_dict = dict(ports_fc.properties)
ports_json = {
    "featureCollection": {
        "layers": [ports_fc_dict]
    }
}
  • 使用add方法将导入
ports_item_properties = {'title': 'Example',
                        'description':'Example demonstrating conversion of pandas ' + \
                         'dataframe object to a GIS item',
                        'tags': 'arcgis python api, pandas, csv',
                        'text':ports_json,
                        'type':'Feature Collection'}
ports_item = gis.content.add(ports_item_properties)
ports_item
发布一个空服务

有时我们也会需要发布一个空服务,然后在使用客户端软件对它进行编辑。在Python API中,可使用create_service方法创建一个空服务。

create_service函数需传递一个服务名称,为了避免重复的名称,可通过is_service_name_available方法判断名称是否可用。

service_name = "jiaoxn"
service_type = "featureService"

if gis.content.is_service_name_available(service_name=service_name, service_type=service_type):
    empty_service_item = gis.content.create_service(name=service_name, service_type=service_type)

组织内容

当你的Protal中的内容过多时,可以通过创建文件夹来分类管理。在Python API中,可使用ContentManager示例中的create_folderdelete_folder方法来管理文件夹。然后使用Item对象实例的move方法来移动内容至特定的文件夹。

gis.content.create_folder("PythoAPI")
empty_service_item.move(folder="PythoAPI")

如果需要将内容移动至主目录下面,其参数folder为"/"。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值