Questions tagged «arcpy»

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

2
使用ArcPy以编程方式检测Join?
我有一些从ArcMap项目中启动的Python代码。用户可能已经在项目中创建的所有联接都必须删除,以便我的代码运行。不幸的是,删除联接的代码…arcpy.RemoveJoin_management(“ layer1”,“ layer2”)…也破坏了一些对我的应用程序至关重要的图层属性(突出显示的字段,只读字段等)。 如果通过右键单击ArcMap中的图层并选择“删除连接”来删除连接,则图层属性将保持不变。 如果我可以从代码中检测到联接,则只需退出代码并显示一条消息,用户必须在尝试运行代码之前手动删除其联接。因此...可以通过编程方式检测到联接吗?



1
如何使用ArcPy删除选定的行?
我想删除要素类中的所有行,但保留第1至5行。另一方面,我想保留前五行并删除其他行。我知道我必须使用搜索光标和更新光标,但是我不能使用它们。如何使用ArcPy删除行?
10 arcpy  cursor 

2
在Python脚本工具参数中使用MultiValue?
我的脚本与一起选择的单个要素类可以正常工作clip_fc = arcpy.GetParameter(0)。 但是,当我在脚本属性中将clip_fc设置为MultiValue,然后选择多个要素类时,出现错误“参数无效”。 谁能告诉我我要去哪里错了? import arcpy import os.path from arcpy import env arcpy.env.workspace = r"C:\GIS Home\project_1\clipshps\Combined_mf.gdb" arcpy.env.overwriteOutput = True clip_fc = arcpy.GetParameter(0) clip_name = str(clip_fc) output_dir = r"C:\GIS Home\project_1\clipshps\outputs_clip" for fds in arcpy.ListDatasets(): for fc in arcpy.ListFeatureClasses('','',fds): out = os.path.join(output_dir, fc + "_" + clip_name[40:] + "_clip.shp") arcpy.Clip_analysis(fc, clip_fc, …

4
将重叠爆炸到新的非重叠多边形?
给定多个以多种方式重叠的多边形,我想从这些要素中迭代导出所有不与其他多边形重叠的多边形。 该产品将具有许多不重叠的功能,将它们加在一起便构成了原始功能。 然后可以将乘积用作区域统计的输入,这比在每个多边形上迭代区域统计要快得多。 我一直试图在ArcPy中对此进行编码,但没有成功。 是否已经存在执行此操作的代码?

3
具有多边形的“贪婪”剪切线
我希望将一组折线(下图中的黑线)剪辑到多边形的外部边界。多边形内的任何空隙均应忽略。我理想的输出是黄色虚线。初始线可能是直线,也可能不是直线。图像是一个简化的示例,实际上多边形要复杂得多,并且有数百条线。我认为凸包不会起作用(但是我可能错了)。我对arcgis,qgis,arcpy,shapely等解决方案持开放态度。最好在python中进行编码,因为如有必要,我也对其他选项开放。为了使我的同事更容易共享工具,Arcgis也将是更可取的,但这不是必需的。 我现在能想到的最好的方法是将一条线与多边形相交,在所有边界相交处创建一组点。按距离到直线起点的距离对点进行排序。最远和最近的(FAC)点将是多边形的外边界。然后,使用FAC点从原始线中选择适当的顶点,并从适当的点创建黄色虚线。它应该可以工作,但看起来比必要的更为复杂。 一些其他想法: 这些线是线性的,足以进行点之间的简单距离计算,而不必进行线性参照。 如果有一种工具可以在一点上分割一条线,但是我找不到它,那么在arcpy中这很容易。 有人在想吗?

1
数据访问的“ SHAPE @ XY”和“ SHAPE @ TRUECENTROID”令牌之间有什么区别?
数据访问搜索光标。 令牌"SHAPE@XY"和之间的区别是什么(如果有的话)"SHAPE@TRUECENTROID"? 他们在测试多边形上返回了相同的坐标: >>> cursor = arcpy.da.SearchCursor("test", "SHAPE@XY") >>> for row in cursor: ... print row[0] ... (559389.3838043335, 4239093.201390337) >>> cursor = arcpy.da.SearchCursor("test", "SHAPE@TRUECENTROID") >>> for row in cursor: ... print row[0] ... (559389.3838043335, 4239093.201390337) 对于多部分面要素,其行为方式相同。它会返回不同的结果吗?

8
最大限度地利用CPU
我的脚本是将线与多边形相交。因为有3000多个线和500000多个多边形,所以这是一个漫长的过程。我从PyScripter执行: # Import import arcpy import time # Set envvironment arcpy.env.workspace = r"E:\DensityMaps\DensityMapsTest1.gdb" arcpy.env.overwriteOutput = True # Set timer from datetime import datetime startTime = datetime.now() # Set local variables inFeatures = [r"E:\DensityMaps\DensityMapsTest.gdb\Grid1km_Clip", "JanuaryLines2"] outFeatures = "JanuaryLinesIntersect" outType = "LINE" # Make lines arcpy.Intersect_analysis(inFeatures, outFeatures, "", "", outType) #Print end …

3
在将IDLE与ArcGIS Pro和ArcGIS 10.x for Desktop体系结构一起使用时,如何区分Python版本?
我刚刚开始在笔记本电脑上使用ArcGIS Pro 1.0.0附带的Python 3.4.1,并且笔记本电脑还装有安装了ArcGIS 10.3 for Desktop的Python 2.7.8,我想将运行的机会降到最低当我打算并需要使用另一个版本时,一个版本的Python。 在Windows资源管理器中,现在有两个Python文件夹:C:\ Python27和C:\ Python34。 在Windows的“开始”菜单上的“所有程序”>“ ArcGIS”下,有一个带有IDLE(Python GUI)的Python 2.7文件夹,我经常使用它来启动IDLE,因此从这里开始就可以了。我测试过,它确实从2.7.8开始。 我曾期望在Python 2.7旁边或者在“所有程序”>“ ArcGIS”>“ ArcGIS Pro”下看到“ Python 3.4”文件夹,但是它在“所有程序”下的自己文件夹中。它包含另一个IDLE(Python GUI),该IDLE按预期启动3.4.1。 但是,当我在“开始”菜单上查看程序列表时,事情变得有些混乱,因为有两个IDLE(Python GUI)条目可供选择: 通过右键单击每个属性并使用其“属性”的“常规”选项卡,我将它们分别重命名为IDLE(Python GUI)2.7和IDLE(Python GUI)3.4,因此不会再造成混乱。 我通常以另一种方式启动IDLE的方法是,右键单击* .py文件,然后选择Edit with IDLE-但是我将获得的IDLE的Python版本现在是模棱两可的。通过测试,我发现它是3.4.1。 有没有一种方法可以将我的“带IDLE编辑”选择变成这两个选择? 使用IDLE 2.7编辑;和 使用IDLE 3.4进行编辑 我从不使用PythonWin进行编辑,所以如果我限于可以与* .py文件关联的两个程序来进行编辑,那么我很乐意牺牲使用PythonWin进行编辑,而放弃使用Python 3.4进行编辑。

2
使用ArcPy更改标签样式(字体,颜色,大小等)?
我正在尝试为ArcGIS 10.2编写一个python宏,该宏将根据不同类型的公寓自动标记图层中的点。例如,一种风格的公寓将有一个蓝色的正方形,上面带有白色的加粗文本作为标签。另一个将是带有黑色粗体的粉红色正方形;另一个将带有带有白色粗体文本的红色正方形,依此类推。 您将在arcpy中使用什么表达式或函数来更改这些标签的样式? 当前,该脚本通过地图代码标记公寓,并根据需要在TOC中将其名称更改为公寓。 现在,我想更改标签的字体,图形和大小,以便为每个标签制作一个唯一的标签,然后在需要做这些层之一时,按下按钮并简单地自动执行该过程。 使用Python脚本(ArcPy,IDLE等)可以改变字体,标签和图形吗? 我决定编辑这篇文章,以最终说明我要在这里做什么,所以不会造成混乱。本质上,地图上的点将从上面的图片变为: 我尝试使用该lblClass.expression函数,但是我尝试使用的代码不起作用。我认为这可能是朝正确方向迈出的一步。下面是一些我试图用来获取labelClass.expression来更改标签字体的代码。 for lblClass in aptLayer.labelClasses: lblClass.showClassLabels = True def getLabel (Code, Type): if Type == "MRR": return "<FNT name = 'Arial' size = '12'>" & Code & "</FNT>" elif Type == "TAX": return "<FNT name = 'Arial' size = '12'>" & Code & …

3
使用ArcPy从模板要素类创建渔网?
我不能使用arcpy.CreateFishnet_management工具,因为使用shapefile定义参数“ templateExtent”不会自动填充参数“ originCoordinate”和“ yAxisCoordinate”。 import arcpy from arcpy import env env.overwriteOutput = True env.workspace = r"D:\Users\julia\erste_aufg" #Process: Create Fishnet outFeatureClass = r"D:\Users\julia\erste_aufg\at001l_wien\at001l_wien\wien.shp" cellSizeWidth = '200' cellSizeHeight = '200' templateExtent = r"D:\Users\julia\erste_aufg\at001l_wien\at001l_wien\at001l_wien.shp" arcpy.CreateFishnet_management(outFeatureClass, "", "", cellSizeWidth, cellSizeHeight, '0', '0', "", "NO_LABELS", templateExtent, "POLYGON") 它在ModelBulider中运行,因此在ModelBulider的后台运行着某些东西,当它具有“ templateExtent”时,它可以创建参数“ originCoordinate”和“ yAxisCoordinate”。仅通过参数“ templateExtent”如何使该工具在ArcPy中运行? 如果有人有解决方案,我将非常高兴,因为我需要使用脚本工具中的Fishnet,并且如果不这样做,因为最后会有一个循环,因此范围的值始终是不同的。 整个脚本的第一部分

1
在ArcMap / ArcPy中进行批量地理配准?
我有大约50张pdf地图,我想批量地理参考和/或地理校正。我已经将其中一个保存为jpg,并对其进行了手动地理定位,并希望将位于相同位置且具有相同范围的其余部分自动化。 每种情况下密度梯度都会变化,但是所有50种情况下的贴图(现在都保存为jpg)将具有相同的范围。 是否有人知道仅在Arcmap 10.2中处理批处理的分步教程的链接?我正在考虑使用“ 从文件变形”代码或可能使用“自动注册”选项,但不确定从哪里开始? 示例代码是: import arcpy arcpy.WarpFromFile_management( "\\cpu\data\raster.img", "\\cpu\data\warp_out.tif", "\\cpu\data\gcpfile.txt", "POLYORDER2", "BILINEAR")

1
使用ArcPy更改为历史版本?
我在尝试使用Python和arcpy.ChangeVersion_management更改为SDE要素类的历史版本时遇到问题。 我可以使用ArcMap手动将版本更改为特定的日期和时间。我还能够使用ModelBuilder完全自动化该过程。 当我将ModelBuilder模型导出到python脚本时,脚本运行无误,但所选的版本是带有今天日期的历史版本,而不是选择为date参数的日期。 使用Arcmap和Python窗口(地理处理-> Python),我也可以运行python代码而不会出现错误,结果是相同的。使用当前日期选择历史图层,而不选择使用日期作为日期参数。 这是我正在执行的Python语法: arcpy.ChangeVersion_management("Parcels", "HISTORICAL", "", "7/1/2013 4:30:00 PM") 我也使用以下方法得到相同的结果: historyDate = datetime.datetime(2011, 7, 1) arcpy.ChangeVersion_management("Parcels", "HISTORICAL", "", historyDate) 而以下引发RuntimeError: historyDate = datetime.date(2011, 7, 1) arcpy.ChangeVersion_management("Parcel", "HISTORICAL", "", historyDate) 这是一个已知的错误,还是我会以错误的方式处理?

1
确定形状区域字段名称
我正在处理各种空间多边形文件(shapefile,文件/个人gdb要素类,sde要素类(某些具有空间视图)),并且根据文件类型,我得到了多个Shape Area要素类字段名称(必填字段,而不是已创建的字段) 因此,例如,字段名称的范围从“ Shape_Area”,“ SHAPE_Area”,“ SHAPE.AREA”,“ GEOMETRY_Area”,“ GEOMETRY.AREA” 我正在编写一个python脚本以提取所有这些类型的要素类的区域,并且按照以下方式进行操作: for field in arcpy.ListFields(fc): if field.name in ["Shape_Area", "SHAPE_Area", "SHAPE.AREA", "GEOMETRY_Area", "GEOMETRY.AREA"]: do something 我想知道是否还有一种更聪明的方法来提取形状区域字段,而不只是列出所有可以命名的方式?似乎没有像Area这样的字段属性。还有其他方法吗?

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.