Questions tagged «arcpy»

由Esri创建的网站包,用于将Python桌面(ArcMap和ArcGIS Pro)的地理处理,地图绘制等内容暴露给Python。

2
地理处理速度测试的结果异常
我一直在观察Python地理处理脚本的异常性能。(附加的)脚本执行以下操作: 使用搜索光标查找与面要素相对应的UTM区域 根据搜索光标结果创建空间参考对象 将.csv转换为要素图层,然后转换为点要素类 根据脚本的运行方式,我注意到处理时间明显不同: 使用IDLE = 203秒的32位处理 32位处理前台脚本工具 = 91秒 64位处理后台脚本工具 = 206秒 在上述条件下,为什么此脚本的性能会如此不同? 我当然不希望前台运行的32位脚本工具的速度是其他方法的2倍。 import arcpy, os, time ###IDLE Parameters ##fc = r'C:\path\to\polygon\fc\with\utm\zones\and\features' ##outws = r'C:\out\location' ##arcpy.env.workspace = r'C:\workspace' #################### ## Script tool parameters fc = arcpy.GetParameterAsText(0) # Feature class outws = arcpy.GetParameterAsText(1) # Folder arcpy.env.workspace = arcpy.GetParameterAsText(2) …

6
将ArcGIS Desktop许可证设置为较低级别,以测试Python脚本是否仍在运行?
我有一个Python脚本,需要将其提供给客户端。 我们目前正在评估客户端需要的许可级别,以便出于购买软件的目的运行脚本。 我们公司都拥有ArcGIS 10.1 Advanced许可证。 我对照Web帮助检查了脚本中使用的所有工具和扩展,发现它们应在标准许可级别上工作。 当我们在公司或公司中没有标准许可证级别时(只有较高的高级级别),有没有办法针对标准许可证级别测试脚本?

3
使用ArcGIS for Desktop在字段中查找重复记录?
我正在基于称为“ ID”的属性在dbf文件中寻找重复记录。我有各种dbf文件,从500,000条记录到150万条记录,我知道有很多重复项。 我想添加一个ID为“是”或“否”(或1或0很好)的字段“ Duplicate”,当ID属性存在于其他位置时。在字段计算器中使用以下python脚本,对于重复项返回1,对于唯一项返回0; uniqueList = [] def isDuplicate(inValue): if inValue in uniqueList: return 1 else: uniqueList.append(inValue) return 0 isDuplicate(!FIELD_NAME!) 但是,第一个记录(例如5个重复ID)也将返回为0(随后的4个被视为重复)。我需要将所有5个标记为重复,因为该ID在其他位置存在。 使用以下代码将为您提供ID出现次数的递增计数,其中1表示第一次出现,以此类推; UniqueDict = {} def isDuplicateIndex(inValue): UniqueDict.setdefault(inValue,0) UniqueDict[inValue] += 1 return UniqueDict[inValue] isDuplicateIndex( !YOUR_FIELD! ) 如果该记录的ID在其他地方存在,我只想要1(或是)!(ArcGIS版本10.1) 我看到了其他答案,例如用于识别重复记录的Python脚本(跟进),但效果不佳。

4
使用栅格处理确定点是否被包围
我正在尝试为自然灾害模型改进当前极其繁琐的vector / python处理。目前,我们有一个冗长的脚本,该脚本会从给定点生成距离/方位线,以确定: 与其相交的多边形的类型(例如,森林,草丛,沼泽等) 到该多边形的距离 这些线中有多少条与多边形相交,以确定其“环绕”程度。 涉及的更多,但这就是要点。我正在尝试找到一种方法来改进此问题,目前已在第3部分中介绍。该想法是确定某个点是否完全被多边形包围,例如在200m之内 因此,在我的附件图像中,我希望将点A标记为比点B具有更高的风险,因为它完全被多边形包围了。可以重复执行1300万个点,因此这不是一个小任务,我宁愿有一个表面来从中获取值,而不是运行脚本。我认为必须采用各种水文工具或成本路径,但我似乎无法解决。 我该怎么办?


4
使用ArcPy将ArcSDE地理数据库复制到文件地理数据库?
我想将SDE数据库的精确副本(域,要素数据集,要素类等)复制到文件地理数据库中。 我尝试了几种可能性,包括: 使用复制(数据管理)过程 创建一个新的GDB并从SDE手动复制每个要素数据集 从SDE导出xml工作区文档并将其导入到GDB中 该Copy_management过程似乎不适用于将SDE复制到GDB,因为输入和输出数据类型必须匹配。 将每个要素数据集导入新GDB的过程可能也可以使用Copy_management通过遍历每个要素数据集来自动执行,尽管如果其中一个过程出现错误,这似乎可能会导致复制不完整的问题。 导出和导入xml工作区似乎可行,尽管当在大型地理数据库上使用该过程时,该过程会创建非常大的文件。 是否有比上述方式更简单的方式可以将SDE的内容和模式复制到GDB,并且可以自动进行? 如果不是,是否有任何理由不应在此过程中使用上述可能性?

2
使用ArcPy在文件地理数据库中生成真实的曲线椭圆多边形?
作为背景,此问题源于试图回答有关如何从“表格到椭圆”工具输出的线生成重叠多边形的问题? 使用ArcMap 10.1 GUI,使用椭圆构造工具将真实的曲线多边形数字化为文件地理数据库要素类非常容易,但是... 从包含中心点,长轴,短轴和方位角的表中读取行(arcpy.da.SearchCursor)时,是否可以编写真正的曲线椭圆多边形? 我曾希望arcpy.da.InsertCursor可以使用一个令牌来执行此操作,但是SHAPE@似乎受到Geometry对象支持的功能的限制,并且似乎不包含真实的曲线。

5
以编程方式识别ArcMap中的联接字段?
是否可以以编程方式标识用于在ArcMap中将两个数据集表联接在一起的联接字段?我目前正在使用ArcGIS 10.0,SP5,并且希望使用ArcPy解决方案,但是如果没有ArcPy解决方案,我不会反对其他解决方案。 我尝试过的一种方法是遍历所有字段并查找匹配的“ baseName”,但这只是一个“有根据的猜测”,您希望两个数据库中的字段名相同。 对于我所需要的内容的图形表示,我基本上想标识“输入连接字段”和“输出连接字段”,如“添加连接”对话框中所示,但实际上是事后的。 这是一个标记问题,可以通过编程方式检测“加入”吗?,但是在这种情况下,我想扩展功能以识别用于将两个(或多个)数据集连接在一起的FIELD。

6
如何以编程方式检查形状的数量=表记录的数量?
我有大约1000个shapefile已损坏(请参阅附件的错误消息)。shapefile是从eCognition Developer 8生成的。有一个脚本工具似乎可以在将shapefile识别为损坏后对其进行修复。 编辑: 我想创建一个快速脚本来遍历我所有的shapefile,并检查形状的数量是否与表记录匹配。我可以使用以下方法对表记录进行计数: # Name: fcCount.py # Purpose: calculate the number of features in a featureclass # Import system modules import arcpy from arcpy import env env.workspace = "C:/data" Sample = "MyShp.shp" result_dbf = int(arcpy.GetCount_management(Sample).getOutput(0)) print result_dbf 我最终想创建某种逻辑检查,例如: if result_dbf = result_shp: pass else: print "There is a …

3
能否检测出它是在桌面还是服务器上运行?
我正在开发一些既要作为ArcGIS Server Web服务又要作为独立脚本运行的代码。我希望能够略微修改执行方式,具体取决于它是作为AGS Web服务运行还是作为独立的python /在桌面中运行。 有没有办法检测到这一点? 我已经做了一些搜索,但是还没有找到满意的结果。我已经看到了arcpy.mapping.CreateGISServerConnectionFile,但是它设置了到服务器的连接,而不是检查当前环境。我还寻找了有关如何在AGS中运行服务的信息(例如this),但是我并没有真正看到arcpy.isWebService()函数类型的任何东西。我是否仅需要检查环境(例如查看是否已设置“%scratchFolder%或检查与sys.argv相关的内容”)?似乎是一种不稳定的解决方案。


3
使用ArcPy和Python替换属性表中的非英文字符?
我有一些shapefile,其中某些属性包含非英语字符ÅÄÖ。由于某些查询不适用于这些字符(特别是ChangeDetector),因此我尝试使用一个简单的脚本预先更改它们,并将新字符串添加到另一个字段中。 但是,更改字符效果很好,但不能使用arcpy.UpdateCursor更新该字段。 解决这个问题的合适方法是什么? 我也曾尝试通过字段计算器来执行此操作,同时将“代码”发布到代码块中,出现相同的错误。 错误消息: 运行时错误回溯(最近一次调用最近):文件“”,行1,在文件“ c:/gis/python/teststring.py”,行28,在val =代码(str(prow.Typkod)) UnicodeEncodeError:'ascii'编解码器无法在位置3处编码字符u'\ xc4':顺序号不在范围内(128) 码: # -*- coding: cp1252 -*- def code(infield): data = '' for i in infield: ## print i if i == 'Ä': data = data + 'AE' elif i == 'ä': data = data + 'ae' elif i == 'Å': …

5
使用ArcPy重命名字段?
我需要做什么: 重命名表/功能类的字段名称 将所有值复制到新字段 到目前为止,我已经按照@ artwork21的建议完成了以下代码: import sys import traceback import arcpy from arcpy import env ## ARGUMENTS # argv[1] = input table/feature class path # argv[2] = input old field name # argv[3] = input new field name path = sys.argv[1] oldFieldName = sys.argv[2] newFieldName = sys.argv[3] env.overwriteOutput = True …

2
如何为花园地块创建日照强度图?
我对创建一个栅格表面感兴趣,该栅格表面描述了一个小花园地块每单位面积的平均太阳强度。我想模型的输入如下: 地块面积-为简单起见,让我们假设花园地块是圆形的。 周围森林边缘的平均树高 各种太阳角下的太阳强度 随时间推移相对于花园地块的平均太阳角度。 我最终想在树木环绕的花园中显示植物生长的最佳位置。谁能指出我的解决方案?尽管我找不到任何参考资料,但我敢肯定有人已经这样做了。 编辑: 出于示例目的,所附图像显示了一个1英亩的花园地块,周围是针叶树的平均年龄。为了进一步简化此分析,假设我们只对6月至10月园艺季节的太阳天数和强度感兴趣。砍树不是一种选择!

1
在执行ArcGIS Python脚本工具期间是否提示用户输入?
在为脚本工具指定了所有参数之后,我想提示用户输入。我已经看到很多论坛帖子和关于此的stackexchange问​​题,他们都认为这是不必要的,但是我认为我的情况是个例外。我想让用户有机会确认数据,例如有多少组GPS坐标。它们将是是/否的问题(“此数据是否明显不正确?”),脚本工具参数输入表单似乎不适用于此情况。 我知道Tkinter的事件处理程序会导致ArcGIS问题,而其他framworks也有类似的问题。我发现的一种解决方法是让您的脚本调用另一个作为独立进程运行的脚本,并显示来自第二个进程的GUI,但这似乎有点过于骇人听闻了。 显然wxPython 确实可以工作,但是python不包含它。我需要能够分发这些脚本而没有ArcGIS以外的任何其他要求,因此这对我不起作用。 为了澄清,最重要的用途是在我的软件验证检查无法验证数据时提示用户。例如,我有一个要验证的ID列表,但格式不一致。如果我无法在软件中进行验证(例如,ID与常见模式之一不符),我希望能够用是/否对话框提示用户。在我不知情的情况下,可能会创建新的ID格式。 另一个示例:我有一个文件,其中除其他外,其中包含开始和停止时间的表。我想分别验证表的每一行,并将所有这些数据以及其他检查填充到警告窗口中会很快变得难看。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.