Python博客的ArcGIS API

取消
显示结果<年代pan class="lia-link-navigation show-results-for-link lia-link-disabled" aria-disabled="true" id="showingResult">
显示只有 | 而是搜索
你的意思是:

这个地方的其他董事会

最新活动

(27日文章)
Clubdebambos
通过
临时贡献者II

数据通常可以作为Shapefile属性中的属性信息或剩余属性的附加文件Shapefile,例如CSV为例。的ArcGIS API for Python属性的方法Shapefile而且CSV一起放在压缩文件夹中,并作为托管服务包含一个功能层和一个表格.这些必须分别添加和发布。这篇博客文章将会刊登表格并添加为表格到一个功能服务包含一个功能层.之间将创建一个关系功能层表格.虽然这可以通过通过ArcGIS Pro发布来实现,但在这里,我们将使用ArcGIS API for Python只有。

阅读更多…

更多的
9 3. 512
MehdiPira1
通过 Esri贡献者
Esri贡献者

简介

Smartsheet是一个动态的工作空间,使团队能够管理项目,自动化工作流程,并快速构建新的解决方案。Smartsheet使用电子表格,称为sheets,作为它所做的一切的基础,但Smartsheet与微软Excel或谷歌sheets等电子表格程序之间的区别在于Smartsheet包含各种协作功能。

阅读更多…

更多的
11 3. 1715年
AndresCastillo
常规赛MVP

使用ArcGIS API for Python管理web地图

阅读更多…

更多的
1 6 1500年
AndresCastillo
常规赛MVP

ArcGIS API for python User.items()方法说它从folders属性中获取字典,但folders属性说它返回一个列表:
andrescastillo_0 - 1617215088337. - png

andrescastillo_1 - 1617215096675. - png

folders属性实际上返回一个字典列表:
andrescastillo_2 - 1617215109102. - png

更多的
0 0 552
IhabHassan
通过 Esri贡献者
Esri贡献者

最近我偶然发现了ESRI网络课程使用Python更新实时数据,并介绍了如何构建所谓的“feed例程”的教程。这个想法基本上就是从一个共享的JSON文件中读取某个功能集的最新版本,并通过URL访问,并将其提供给您的系统,在这种情况下是一个托管功能层。

在这篇博客中,我想重点介绍“deployLogic”函数,它在读取最新的JSON数据并将其转换为ESRI文件-地理数据库后发生。这个函数演示了如何更新托管特性层数据的非常重要的工作流程,同时保持托管层项id -作为ArcGIS或AGOL项的门户。我没有在ArcPy或Python API的发布文档中找到类似的工作流程解释,我相信它可以用于更复杂的场景。

我将尝试在以下项目中总结函数逻辑:

  • 使用7zip子进程,提取托管层服务定义文件
  • 浏览到解压缩的文件夹,找到底层源文件gdb,并删除它
  • 将上一步中创建的新文件-geodatabase复制到解压缩的服务定义文件夹中
  • 使用7zip压缩<年代pan>服务定义文件夹放入一个新的服务定义文件。Sd '扩展名,而不是'.zip'
  • 使用"FeatureLayerCollectionManager"实例,使用新的服务定义文件更新托管层


这个工作流的简单之处在于它避免了使用ArcGIS Pro项目重新发布服务,所以你不需要从Map对象中通过“getWebLayerSharingDraft”这样的事情,也不需要担心设置所需的标志“overwriteExistingService”等。我发现这条捷径真的很简单,它能帮我完成工作。

使用Python更新实时数据

使用Python更新实时数据

使用Python更新实时数据

更多的
6 2 1440年
DavidVitale
通过
新贡献者III

万圣节快乐!用于Python的ArcGIS API刚刚发布了它的最新版本1.7.0。点击这里查看发布说明看看有什么新功能,哪些bug已经修复。访问我们的登陆页面查看有关Python API的所有其他信息。

你可以通过conda安装这个最新版本:

Conda install -c esri arcgis

或小毛病:

PIP安装arcgis

我们迫不及待地想知道你对这个版本的看法!

更多的
4 10 3855年
RobertWeber
通过
新贡献者III

我们相当频繁地为现场工作人员创建贴图包,这样他们在现场离线时就可以获得额外的地图。通常,这个过程涉及到几个不同的工具,这取决于需要平铺的特定地图或图像。一般来说,我发现ManageTileCache和ExportTileCache GP工具是最可靠的。所以最近我开始考虑将它们与Python API结合起来,这样我们就可以有一个工具来将TPK发布到我们的AGOL Org。任何反馈或建议都将不胜感激。

该工具的基本功能概述:

  1. 建立连接并从您的门户获得一个令牌,无论在专业版中使用的是什么凭证
  2. 取一个输入栅格数据集
  3. 在与输入数据集相同的目录中为输出创建一个新文件夹
  4. 允许用户命名输出数据集
  5. 运行ManageTileCache工具创建本地磁贴缓存(默认情况下使用输入数据集的整个范围,并且根据输入数据源像素信息创建LOD)
  6. 2 .运行ExportTileCache工具创建本地tpk文件
  7. 通过arcpy消息报告文件大小信息
  8. 将tpk项目添加到门户
  9. 尝试发布tpk作为托管瓷砖层
    • 发布tpk项似乎需要额外的步骤,即通过REST api生成POST,以实际解包和发布使用的贴片' / updateTiles '包含在TPK中,这是使用请求完成的。Post只是简单地使用publish()和python API在创建托管tile层之外往往会失败。
  10. 使用urllib获取关于托管tile层和LOD的附加信息。

这个工具在某些情况下对我们来说很方便,我希望它也适用于其他人。不过,如果有人有更好的方法,我总是很感兴趣。

更多的
2 0 1383年
Oliver_Burdekin
临时贡献者II

对于任何对GIS开发和Python感兴趣的人,我已经整理了一个在Jupyter笔记本上使用esri的ArcGIS Python API的教程。

ArcGIS Python API在Jupyter笔记本| burdGIS - YouTube

# gis# python# esri# arcgis#教程# jupyter

更多的
2 0 781
EarlMedina
通过 Esri贡献者
Esri贡献者

很多时候,人们想知道如何使用ArcGIS API for Python更新图层符号。在快速搜索帖子和文档后,你可能会发现有很多方法可以实现这一点,但你不确定如何继续。如果你读到这一页,我希望一切都能变得更有意义。在这篇文章中,我将介绍:

  1. 如何更新层符号在一个网络地图
  2. 如何更新层符号在一个层
  3. 如何在功能服务层上更新符号

如果上面这些看起来都一样,不要担心——很快,#1、#2和#3之间的区别就会变得清晰,你会更好地意识到什么时候应该选择一种方法而不是另一种方法。

注意:虽然我正在说明如何更新符号,但您可以应用相同的概念来更新/配置其他属性,如弹出窗口、标签等。我鼓励您在以下独立脚本的基础上进行构建,或者只使用您需要的部分!

如何在Web Map中更新层符号

假设你在ArcGIS Online/Portal for ArcGIS的内容中添加了这个地图服务:https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer

你将项目添加到Web Map中,在一段时间内它满足了你的需求:

initial_webmap

但是有一天,您决定不太喜欢橙色,如果您可以更好地可视化每个县的总人口,您将更多地使用Web Map。

过了一段时间,你确定了所附的符号<年代pan style="font-family: courier new, courier, monospace;">webmaplyr.json.它有点长,所以我不会把它包括在这里——这很好,因为你可能不想在你的脚本中定义JSON,更喜欢从文件中读取。

注意:

如果您不知道从哪里开始生成自己的JSON,请不要烦恼。首先创建一个Web Map,就像你想要的那样(应用样式、标签、选项等)。从那里,你可以去(where<年代trong>itemID是Web Map的项目id):

或者,你也可以使用ArcGIS API获取JSON,只需几行代码:

arcgis<年代pan class="keyword token">进口地理信息系统<年代pan class="keyword token">进口json康涅狄格州<年代pan class="operator token">=地理信息系统<年代pan class="punctuation token">(“https://machine.domain.com/portal”“admin”“密码”项<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.得到<年代pan class="punctuation token">(<itemID<年代pan class="operator token">>item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(#包括下面的行美化JSON打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的

下面的脚本说明了如何从文件中读取准备好的JSON并将其应用到Web Map:

arcgis<年代pan class="keyword token">进口地理信息系统<年代pan class="keyword token">进口json<年代pan class="punctuation token">,sys<年代pan class="keyword token">defsearch_item康涅狄格州<年代pan class="punctuation token">,layer_name<年代pan class="punctuation token">)search_results<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.搜索<年代pan class="punctuation token">(layer_name<年代pan class="punctuation token">,item_type<年代pan class="operator token">=“网站地图”proper_index<年代pan class="operator token">=我<年代pan class="keyword token">为我<年代pan class="punctuation token">,年代<年代pan class="keyword token">在列举<年代pan class="punctuation token">(search_results<年代pan class="punctuation token">)如果“””+layer_name<年代pan class="operator token">+“””str<年代pan class="punctuation token">(年代<年代pan class="punctuation token">)found_item<年代pan class="operator token">=search_results<年代pan class="punctuation token">[proper_index<年代pan class="punctuation token">[0get_item<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.得到<年代pan class="punctuation token">(found_item<年代pan class="punctuation token">.id<年代pan class="punctuation token">)返回get_item<年代pan class="keyword token">defupdate_wm_layerdef项<年代pan class="punctuation token">)item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(打印"******************* 最初的定义 *********************"打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的打开包含符号更新的JSON文件开放<年代pan class="punctuation token">(“/道路/ / webmaplyr.json”作为json_data<年代pan class="punctuation token">:数据<年代pan class="operator token">=json<年代pan class="punctuation token">.负载<年代pan class="punctuation token">(json_data<年代pan class="punctuation token">)#设置item_properties以包含所需的更新item_properties<年代pan class="operator token">=“文本”json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(数据<年代pan class="punctuation token">)#“提交”更新到项目项<年代pan class="punctuation token">.更新<年代pan class="punctuation token">(item_properties<年代pan class="operator token">=item_properties<年代pan class="punctuation token">)#打印item_data查看更改是否反映new_item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(打印"*********************** 新定义 **********************"打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(new_item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的def主要康涅狄格州<年代pan class="operator token">=地理信息系统<年代pan class="punctuation token">(“https://machine.domain.com/portal”“admin”“密码”#搜索项目,获取项目数据)项<年代pan class="operator token">=search_item<年代pan class="punctuation token">(康涅狄格州<年代pan class="punctuation token">,“wm_lyrsym”update_wm_layerdef<年代pan class="punctuation token">(项<年代pan class="punctuation token">)如果__name__<年代pan class="operator token">= =“__main__ 'sys<年代pan class="punctuation token">.退出<年代pan class="punctuation token">(主要<年代pan class="punctuation token">(

脚本运行后,你会得到如下结果:

更新网页地图

如何更新Portal/ArcGIS在线项目符号:

这里的区别很微妙。在选项#1中,正在更新的项是Web Map。这里,正在更新的项目是功能/地图图像服务层。该服务可能是您发布到ArcGIS Online/Portal for ArcGIS的内容,也可能是您作为项目添加到内容中的地图/功能服务。

如果您所需要做的只是更改Web Map中的样式,那么选项#1很好,但也许您需要更改组织中某个项目的样式。由于这个项目被许多人使用(并且交付成果偶尔提供给组织外部的涉众),您希望标准化它的外观。

在这个例子中,我使用了与之前相同的Map Service (https://sampleserver6.arcgisonline.com/arcgis/rest/services/USA/MapServer),并对符号执行类似的更新,只是对Layer项本身。

注意,这个例子更具体地说明了符号的更新方式:

Layer_def = item_data[<年代pan style="color: #690;">“层”] [<年代pan style="color: #ff0000;">3.] [<年代pan style="color: #690;">“layerDefinition”]

  • 在这里,您可以看到只有索引3上的层被更新了(县)-服务中的其他所有内容都保持不变。
  • 审查<年代pan style="font-family: courier new, courier, monospace;">drawingInfo.json你可以看到渲染器从Single symbol更新为Classified。

你可能想知道为什么包括这个:

其他:
打印(<年代pan style="color: #690;">“目前还没有层定义…正在创建一个…”
create_layer_def(项)

  • 默认情况下不一定要创建层定义。让我们假设我只是把地图服务作为一个项目添加到我的内容中——这个ArcGIS Online/Portal for ArcGIS项目没有附加层定义。
    • 如果将项目添加到Web Map,做一个简单的符号更改,并保存该层,这将生成一个层定义。
    • complete.json包含应用于整个项目(全部4层)的层定义。

arcgis<年代pan class="keyword token">进口地理信息系统<年代pan class="keyword token">进口json<年代pan class="punctuation token">,sys<年代pan class="keyword token">defsearch_layer康涅狄格州<年代pan class="punctuation token">,layer_name<年代pan class="punctuation token">)search_results<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.搜索<年代pan class="punctuation token">(layer_name<年代pan class="punctuation token">,item_type<年代pan class="operator token">=‘*’proper_index<年代pan class="operator token">=我<年代pan class="keyword token">为我<年代pan class="punctuation token">,年代<年代pan class="keyword token">在列举<年代pan class="punctuation token">(search_results<年代pan class="punctuation token">)如果“””+layer_name<年代pan class="operator token">+“””str<年代pan class="punctuation token">(年代<年代pan class="punctuation token">)found_item<年代pan class="operator token">=search_results<年代pan class="punctuation token">[proper_index<年代pan class="punctuation token">[0get_item<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.得到<年代pan class="punctuation token">(found_item<年代pan class="punctuation token">.id<年代pan class="punctuation token">)返回get_item<年代pan class="keyword token">defupdate_layer_def项<年代pan class="punctuation token">)item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(如果item_data<年代pan class="keyword token">是没有一个<年代pan class="punctuation token">:这里注意我们正在改变层定义的特定部分layer_def<年代pan class="operator token">=item_data<年代pan class="punctuation token">[“层”3.“layerDefinition”打印"******************* 最初的定义 *********************"打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的打开包含符号更新的JSON文件开放<年代pan class="punctuation token">(“/道路/ / drawingInfo.json”作为json_data<年代pan class="punctuation token">:数据<年代pan class="operator token">=json<年代pan class="punctuation token">.负载<年代pan class="punctuation token">(json_data<年代pan class="punctuation token">)#设置drawingInfo等于JSON文件中的内容layer_def<年代pan class="punctuation token">[“drawingInfo”数据<年代pan class="comment token">#设置item_properties以包含所需的更新item_properties<年代pan class="operator token">=“文本”json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(item_data<年代pan class="punctuation token">)#“提交”更新到项目项<年代pan class="punctuation token">.更新<年代pan class="punctuation token">(item_properties<年代pan class="operator token">=item_properties<年代pan class="punctuation token">)#打印item_data查看更改是否反映new_item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(打印"*********************** 新定义 **********************"打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(new_item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的其他的打印“目前还没有层定义…正在创建一个…”create_layer_def<年代pan class="punctuation token">(项<年代pan class="punctuation token">)defcreate_layer_def项<年代pan class="punctuation token">)开放<年代pan class="punctuation token">(“/道路/ / complete.json”作为json_data<年代pan class="punctuation token">:数据<年代pan class="operator token">=json<年代pan class="punctuation token">.负载<年代pan class="punctuation token">(json_data<年代pan class="punctuation token">)#设置item_properties以包含所需的更新item_properties<年代pan class="operator token">=“文本”json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(数据<年代pan class="punctuation token">)#“提交”更新到项目项<年代pan class="punctuation token">.更新<年代pan class="punctuation token">(item_properties<年代pan class="operator token">=item_properties<年代pan class="punctuation token">)#打印item_data查看更改是否反映item_data<年代pan class="operator token">=项<年代pan class="punctuation token">.get_data<年代pan class="punctuation token">(打印"********************* 创建定义 ************************"打印json<年代pan class="punctuation token">.转储<年代pan class="punctuation token">(item_data<年代pan class="punctuation token">,缩进<年代pan class="operator token">=4sort_keys<年代pan class="operator token">=真正的def主要康涅狄格州<年代pan class="operator token">=地理信息系统<年代pan class="punctuation token">(“https://machine.domain.com/portal”“admin”“密码”#搜索项目,获取项目数据)项<年代pan class="operator token">=search_layer<年代pan class="punctuation token">(康涅狄格州<年代pan class="punctuation token">,“earl_api_usalyraw”#尝试更新层定义update_layer_def<年代pan class="punctuation token">(项<年代pan class="punctuation token">)如果__name__<年代pan class="operator token">= =“__main__ 'sys<年代pan class="punctuation token">.退出<年代pan class="punctuation token">(主要<年代pan class="punctuation token">(

如何更新特性服务符号:

在最后一个例子中,我演示了如何在功能服务层上更新符号。在幕后,这个方法实际上只是执行这个操作:更新定义(功能层)-ArcGIS REST API:服务目录| ArcGIS for Developers

那么,这里的区别是什么,什么时候使用这种方法?

  • 这只适用于功能服务。
  • 当您希望对功能服务层进行高级更新时,您可能需要使用这种方法。这可以用来全面标准化功能服务层的外观——不需要做任何客户端修改,将功能服务添加到ArcGIS在线/ ArcGIS Web Map门户的人将看到与开发人员在应用程序中使用服务相同的东西。

在这个例子中,我发布了一个包含两层的Hosted Feature Service:

  1. 美国各州/加拿大各省
  2. 北美主要铁路

原来的功能服务是这样的:

fs-original

这个例子的JSON不是很长。我只是对States/Provinces图层的颜色和宽度做了一些改变:

“drawingInfo”“渲染”“类型”“简单”“象征”“类型”“esriSFS”“风格”“esriSFSSolid”“颜色”20246204105“大纲”“类型”“esriSLS”“风格”“esriSLSSolid”“颜色”101021055“宽度”0.5“scaleSymbols”真正的“透明”0“labelingInfo”

在这个场景中,因为我们更新的是一个Feature Service,而不是我们需要使用的项<年代pan style="font-family: courier new, courier, monospace;">arcgis.features.

arcgis<年代pan class="keyword token">进口地理信息系统<年代pan class="keyword token">从arcgis<年代pan class="punctuation token">.特性<年代pan class="keyword token">进口FeatureLayerCollection<年代pan class="keyword token">进口json<年代pan class="punctuation token">,sys<年代pan class="keyword token">defsearch_layer康涅狄格州<年代pan class="punctuation token">,layer_name<年代pan class="punctuation token">)search_results<年代pan class="operator token">=康涅狄格州<年代pan class="punctuation token">.内容<年代pan class="punctuation token">.搜索<年代pan class="punctuation token">(layer_name<年代pan class="punctuation token">,item_type<年代pan class="operator token">=功能层的proper_index<年代pan class="operator token">=我<年代pan class="keyword token">为我<年代pan class="punctuation token">,年代<年代pan class="keyword token">在列举<年代pan class="punctuation token">(search_results<年代pan class="punctuation token">)如果“””+layer_name<年代pan class="operator token">+“””str<年代pan class="punctuation token">(年代<年代pan class="punctuation token">)found_item<年代pan class="operator token">=search_results<年代pan class="punctuation token">[proper_index<年代pan class="punctuation token">[0方法<年代pan class="operator token">=FeatureLayerCollection<年代pan class="punctuation token">.fromitem<年代pan class="punctuation token">(found_item<年代pan class="punctuation token">)返回方法<年代pan class="keyword token">defupdate_layer_def层<年代pan class="punctuation token">)打开包含符号更新的JSON文件开放<年代pan class="punctuation token">(“/道路/ / hosted_drawinfo_lyr.json”作为json_data<年代pan class="punctuation token">:数据<年代pan class="operator token">=json<年代pan class="punctuation token">.负载<年代pan class="punctuation token">(json_data<年代pan class="punctuation token">)层<年代pan class="punctuation token">.经理<年代pan class="punctuation token">.update_definition<年代pan class="punctuation token">(数据<年代pan class="punctuation token">)打印"******************* 更新的定义 **********************"打印层<年代pan class="punctuation token">.属性<年代pan class="punctuation token">)def主要康涅狄格州<年代pan class="operator token">=地理信息系统<年代pan class="punctuation token">(“https://machine.domain.com/portal”“admin”“密码”#搜索项目,获取项目数据)方法<年代pan class="operator token">=search_layer<年代pan class="punctuation token">(康涅狄格州<年代pan class="punctuation token">,“layerdef”层<年代pan class="operator token">=方法<年代pan class="punctuation token">.层<年代pan class="punctuation token">[1打印层<年代pan class="punctuation token">.属性<年代pan class="punctuation token">)update_layer_def<年代pan class="punctuation token">(层<年代pan class="punctuation token">)如果__name__<年代pan class="operator token">= =“__main__ 'sys<年代pan class="punctuation token">.退出<年代pan class="punctuation token">(主要<年代pan class="punctuation token">(
  • 州/省层位于索引1。

更新结果:

fs-update

关于如何更新层符号的概述到此结束。希望通过本指南,您可以很好地了解如何在您的组织中实现类似的工作流!

更多的
11 8 10.2 k
通过 匿名用户<年代pan class="anon-label">
不适用

我们的Storm Water人员在企业地理数据库中维护了几个特性类,该数据库目前的版本是10.6。每个特性类都与两个表相关:一个用于检查,一个用于事件。每个特性类都有一个字段,该字段表示自该特性通过检查或事件被访问以来的天数。他们用这个字段来表示他们的层,使用渐变的颜色,来显示该功能被访问的时间。例如,红色的特征很长时间没有被访问过,而绿色的特征最近被访问过。"风暴之水"想让这块地每晚自动更新。

我写了一个Python脚本来执行更新。我最近推断它是非常普遍的,适用于任何地理数据库层和任何数量的相关表。我对每个特性类调用该方法一次。如果文档的格式不是你喜欢的,我很抱歉,但我遵循了一些我在网上找到的例子。因为它只是一个脚本,你可以随心所欲地修改它:

#脚本由Roger Dunn编写,信息技术部,城市经理办公室,犹他州奥勒姆市2019年2月#要求ArcGIS桌面标准或高级。#使用ArcPy编写的桌面10.6.1# Target geodatabase是一个被亲切地称为Knight的10.6 geodatabase,但实际上是OREMEGDB#使用ArcPy进口arcpy<年代pan class="comment token">需要# DateTime函数进口datetime<年代pan class="keyword token">defUpdateMasterFeatureClassDayRangeFieldFromMostRecentDetailEventTable\ arcSDEConnectionFileName \<年代pan class="punctuation token">,masterFeatureClassName \<年代pan class="punctuation token">,masterKeyFieldName \<年代pan class="punctuation token">,masterDayRangeFieldName \<年代pan class="punctuation token">,detailEventTableNames \<年代pan class="punctuation token">,detailEventForeignKeyFieldNames \<年代pan class="punctuation token">,detailEventDateFieldNames \<年代pan class="punctuation token">,valueIfNoHistoryFound<年代pan class="punctuation token">)更新一个ArcGIS地理数据库特征类字段,该字段表示细节事件表中某件事发生后的天数(可能通过ArcGIS中的关系类相关,也可能不相关)。此方法不返回值。:param str arcSDEConnectionFileName: .sde连接文件的名称。如果此脚本在ArcGIS Desktop中运行,则使用'Database Connections\'后跟文件名称就足够了。如果这是自动化的,那么.sde文件应该与这个脚本在同一个目录中。:param str masterFeatureClassName:要修改的特性类的名称。arcSDEConnectionFileName中的连接信息应该有用户名和密码(保存的),该用户具有修改masterFeatureClassName的权限。注意,masterFeatureClassName不包括父特性数据集的名称。:param str masterKeyFieldName:主特性类中主键字段的名称。masterDayRangeFieldName:主特性类中的字段名,它将保存从今天的日期到任何detailEventTableNames中最近的事件的日期范围。 :param str[] detailEventTableNames: The names of tables related to the master feature class. :param str[] detailEventForeignKeyFieldNames: For each table listed in detailEventTableNames, include the name of the field in that table that corresponds to the master feature class' primary key field. Therefore, this list is as long as detailEventTableNames. :param str[] detailEventDateFieldNames: For each table listed in detailEventTableNames, include the name of the field in that table that contains the event date. Therefore, this list is as long as detailEventTableNames. :param var valueIfNoHistoryFound: The default value to insert in the master feature class' DayRangeField if no history can be found in any of the detailEventTableNames for that particular feature. ... '''#更改环境工作区,并允许覆盖之前的临时数据集arcpy<年代pan class="punctuation token">.env<年代pan class="punctuation token">.工作空间<年代pan class="operator token">=arcSDEConnectionFileName arcpy<年代pan class="punctuation token">.env<年代pan class="punctuation token">.overwriteOutput<年代pan class="operator token">=真正的#存储“今天”(不要让它在脚本迭代过程中改变scriptToday<年代pan class="operator token">=datetime<年代pan class="punctuation token">.日期<年代pan class="punctuation token">.今天<年代pan class="punctuation token">(#从详细信息表中创建一个字典,其中键是主记录的唯一ID#,值是详细记录的最近日期。#初始化字典valueDict<年代pan class="operator token">=detailTableIndex<年代pan class="keyword token">在范围<年代pan class="punctuation token">(len<年代pan class="punctuation token">(detailEventTableNames<年代pan class="punctuation token">)detailFields<年代pan class="operator token">=\ detailEventForeignKeyFieldNames<年代pan class="punctuation token">[detailTableIndex<年代pan class="punctuation token">]\<年代pan class="punctuation token">,detailEventDateFieldNames<年代pan class="punctuation token">[detailTableIndex<年代pan class="punctuation token">]\<年代pan class="punctuation token">]arcpy<年代pan class="punctuation token">.达<年代pan class="punctuation token">.SearchCursor<年代pan class="punctuation token">(detailEventTableNames<年代pan class="punctuation token">[detailTableIndex<年代pan class="punctuation token">]detailFields<年代pan class="punctuation token">)作为readRows<年代pan class="punctuation token">:readRow<年代pan class="keyword token">在readRows<年代pan class="punctuation token">:masterID<年代pan class="operator token">=readRow<年代pan class="punctuation token">[0dateVal<年代pan class="operator token">=readRow<年代pan class="punctuation token">[1如果masterID<年代pan class="keyword token">是没有一个<年代pan class="operator token">而且dateVal<年代pan class="keyword token">是没有一个<年代pan class="punctuation token">:dateOnly<年代pan class="operator token">=dateVal<年代pan class="punctuation token">.日期<年代pan class="punctuation token">(如果masterID<年代pan class="keyword token">在valueDict<年代pan class="punctuation token">:valueDict<年代pan class="punctuation token">[masterID<年代pan class="punctuation token">]dateOnly<年代pan class="keyword token">其他的如果dateOnly<年代pan class="operator token">>valueDict<年代pan class="punctuation token">[masterID<年代pan class="punctuation token">]valueDict<年代pan class="punctuation token">[masterID<年代pan class="punctuation token">]dateOnly<年代pan class="keyword token">▽dateOnly<年代pan class="keyword token">▽masterID<年代pan class="keyword token">▽dateVal<年代pan class="keyword token">▽readRow<年代pan class="keyword token">▽detailFields<年代pan class="keyword token">▽detailTableIndex<年代pan class="comment token">#打印valueDict# valueDict现在已经填充,是时候修改masterFeatureClass的DayRangeField了#我们的发现masterFields<年代pan class="operator token">=masterKeyFieldName<年代pan class="punctuation token">,masterDayRangeFieldName<年代pan class="punctuation token">]编辑<年代pan class="operator token">=arcpy<年代pan class="punctuation token">.达<年代pan class="punctuation token">.编辑器<年代pan class="punctuation token">(arcSDEConnectionFileName<年代pan class="punctuation token">)# Edit会话在没有撤销/重做堆栈的情况下启动版本化数据(对于第二个参数,#对未版本化的数据使用False)编辑<年代pan class="punctuation token">.startEditing<年代pan class="punctuation token">(真正的试一试arcpy<年代pan class="punctuation token">.达<年代pan class="punctuation token">.UpdateCursor<年代pan class="punctuation token">(masterFeatureClassName<年代pan class="punctuation token">,masterFields<年代pan class="punctuation token">)作为masterRows<年代pan class="punctuation token">:masterRow<年代pan class="keyword token">在masterRows<年代pan class="punctuation token">:masterID<年代pan class="operator token">=masterRow<年代pan class="punctuation token">[0如果masterID<年代pan class="keyword token">在valueDict<年代pan class="punctuation token">:daysSince<年代pan class="operator token">=scriptToday<年代pan class="operator token">-valueDict<年代pan class="punctuation token">[masterID<年代pan class="punctuation token">]天<年代pan class="keyword token">其他的daysSince<年代pan class="operator token">=valueIfNoHistoryFound<年代pan class="comment token">中已经存在的日期范围的计算值不等于# field,修改。我们只需要有变化的行。如果masterRow<年代pan class="punctuation token">[1! =daysSince<年代pan class="punctuation token">:#启动编辑操作编辑<年代pan class="punctuation token">.startOperation<年代pan class="punctuation token">(试一试masterRow<年代pan class="punctuation token">[1daysSince masterRows<年代pan class="punctuation token">.updateRow<年代pan class="punctuation token">(masterRow<年代pan class="punctuation token">)#打印{0}{1}更新。字段{2}={3}'。形式at(masterKeyField, masterID, masterEditField, daysSince)#停止编辑操作。编辑<年代pan class="punctuation token">.stopOperation<年代pan class="punctuation token">(除了编辑<年代pan class="punctuation token">.abortOperation<年代pan class="punctuation token">(daysSince<年代pan class="keyword token">▽masterID<年代pan class="keyword token">▽masterRow<年代pan class="keyword token">最后#停止编辑会话并保存更改编辑<年代pan class="punctuation token">.stopEditing<年代pan class="punctuation token">(真正的编辑<年代pan class="keyword token">▽valueDict<年代pan class="keyword token">▽scriptToday<年代pan class="keyword token">▽masterFields<年代pan class="line-numbers-rows">

我像这样调用函数,但我不打算给出真正的数据库、特征类和表名:

UpdateLayersFromTables<年代pan class="keyword token">进口UpdateMasterFeatureClassDayRangeFieldFromMostRecentDetailEventTable<年代pan class="comment token">#更新特性类1UpdateMasterFeatureClassDayRangeFieldFromMostRecentDetailEventTable<年代pan class="punctuation token">(\<年代pan class="string token">“MyConnection.sde”\<年代pan class="punctuation token">,“MySQLDB.SchemaOwner.FeatureClass1”\<年代pan class="punctuation token">,“UniqueID”\<年代pan class="punctuation token">,“DaysSince”\<年代pan class="punctuation token">,“MySQLDB.SchemaOwner.Class1Inspections”“MySQLDB.SchemaOwner.Class1Events”\<年代pan class="punctuation token">,“FeatClass1UniqueID”“FeatClass1UID”\<年代pan class="punctuation token">,“InspectionDate”“EventDate”\<年代pan class="punctuation token">,10000\<年代pan class="punctuation token">)#更新功能类2UpdateMasterFeatureClassDayRangeFieldFromMostRecentDetailEventTable<年代pan class="punctuation token">(\<年代pan class="string token">“MyConnection.sde”\<年代pan class="punctuation token">,“MySQLDB.SchemaOwner.FeatureClass2”\<年代pan class="punctuation token">,“UID”\<年代pan class="punctuation token">,“DaysSince”\<年代pan class="punctuation token">,“MySQLDB.SchemaOwner.Class2Inspections”“MySQLDB.SchemaOwner.Class2Events”\<年代pan class="punctuation token">,“FeatClass2UniqueID”“FeatClass2UID”\<年代pan class="punctuation token">,“InspectionDate”“EventDate”\<年代pan class="punctuation token">,10000\<年代pan class="punctuation token">)

“Roj”

更多的
3. 3. 2735年
141用户