Questions tagged «arcpy»

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

4
定义Python工具箱帮助的参数说明?
我正在尝试为我们的ArcMap应用程序创建一些Python工具箱(例如MyTool.pyt) 我可以看到帮助文本是使用class self.description属性定义的。 但是,一旦我运行该程序并单击任何参数字段,帮助/说明文本将变为空。我希望能够为每个参数提供描述字段。这是如何完成的? 经过一番回应之后,我发现通过“项目描述”右键单击上下文菜单,可以填充许多字段。有没有一种“ pythonic”的方式来做到这一点?也就是说,仅将某些属性嵌入.pyt文件类中? 例如,在.pyt工具箱定义中,您具有Toolbox类: import arcpy class Toolbox(object): def __init__(self): """Define the toolbox (the name of the toolbox is the name of the .pyt file).""" self.label = "My Toolbox" self.alias = "" # List of tool classes associated with this toolbox self.tools = [MyNiceTool] class MyNiceTool(object): def …

1
在ArcMap中计算Python脚本中的面积
我正在尝试在我的Python脚本中计算多边形的面积。我通过将两个多边形合并在一起来创建一个新的多边形,我想将所得多边形的区域添加到输出文件中的字段中。多边形存储在常规shapefile中并进行投影。面积最好以地图为单位。 我本来以为这是一个非常普通和简单的任务,但是尽管谷歌搜索很多,但到目前为止我仍然找不到有效的解决方案。 我打算在arcpy.updateCursor计算完值后立即使用它插入值(此阶段FC中只有一个功能),所以最简单的方法是将其作为变量返回。任何完成相同任务(将面积值输入正确的字段)的替代解决方案也将起作用。 我也尝试过Python的Field计算器。从帮助页面修改后,我认为以下方法会起作用,但到目前为止还算不上什么。 arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE') exp = "float(!SHAPE.AREA!.split())" arcpy.CalculateField_management(tempPgs, "Shape_area", exp) 在Windows 7上使用Python 2.7运行ArcGIS Basic 10.1 SP1。 我当前代码的相关部分如下所示: #/.../ arcpy.Copy_management(inpgs, outpgs) arcpy.AddField_management(outpgs, 'Shape_area', 'LONG') fields = AM.FieldLst(outpgs) #/.../ # Identify and search for shapes smaller than minimum area where1 = '"' + 'Shape_Area' + '" < ' + …

3
通过属性选择特征(如果在Python列表中)?
我正在尝试在Python中根据属性是否存在于列表中的查询来完成按属性选择。 最简单的查询应该是这样的: qry = " \"OBJECTID\" in oid_list" arcpy.SelectLayersByAttribute_management(inft, "NEW_SELECTION", qry) 但是该方法返回无效的表达式错误。 过去,对于这种类型的查询,我不得不使用更复杂的语法,例如: sqlQuery2 = "nid in (" + ','.join(["'"+x+"'" for x in delta_list]) +")" 但是改编此代码段似乎对我也不起作用,即: "OBJECTID_1 in (" + ','.join(["'"+str(x)+"'" for x in oid_list]) +")" 我在这里想念什么?

5
使用ArcPy遍历1600万条记录?
我有一个包含8列和约1,670万条记录的表。我需要在列上运行一组if-else方程。我已经使用UpdateCursor模块编写了一个脚本,但是在记录了几百万条之后,它的内存不足。我想知道是否有更好的方法来处理这1670万条记录。 import arcpy arcpy.TableToTable_conversion("combine_2013", "D:/mosaic.gdb", "combo_table") c_table = "D:/mosaic.gdb/combo_table" fields = ['dev_agg', 'herb_agg','forest_agg','wat_agg', 'cate_2'] start_time = time.time() print "Script Started" with arcpy.da.UpdateCursor(c_table, fields) as cursor: for row in cursor: # row's 0,1,2,3,4 = dev, herb, forest, water, category #classficiation water = 1; herb = 2; dev = 3; forest = …


4
使用ArcPy将几何转换为WKT吗?
我希望能够在使用Python和ArcPy(无非ArcPy模块)的地理处理操作期间,将ArcGIS图层中的单个要素(或可能包含许多要素)转换为众所周知的文本(WKT)格式。目的是将WKT传递到SQL Server Spatial,并在ArcGIS GP工具集之外进行其他处理。是否有通过ArcPy将ArcGIS几何要素转换为WKT的方法? 我已经阅读了以下内容,但没有找到我想要的内容: Shapefiles to Text(在不建议使用的“样本”工具箱中引用工具) 在ESRI Geometry和WKT之间转换(使用ArcObjects或非ArcPy模块) 如何将shapefile转换为WKT?(使用QGIS和OGR) 显然在Samples工具箱中曾经有一个名为“ 将功能写入文本文件 ”的工具(似乎是Python脚本),但是该工具箱在版本10中已被弃用,我无法找到Samples工具箱的副本(我的机器上有v10.0)。如果没有当前的解决方案,如果有人可以将我指向样本的副本,那么使用该工具也可以。
13 arcpy  convert  wkt 

3
共享ArcGIS Python代码的文件组织
共享ArcGIS python代码和地理处理工具的最佳组织结构是什么?甚至共享代码和共享工具是否是单独的问题? Esri具有针对Arcgis 9.3和10.0发布的“ 工具分发方法”结构: 但是在其他地方,人们却在说类似Also do avoid distributing your code the way its done in Arc Scripts or Code Galleries本地python Distutils的说法。Esri似乎没有对应于10.1(ref)的发行工具文章,这为反论点增加了一些分量。 GIS.se怎么说? 更新:虽然可能为时已晚,但是这个问题的重点是在用于共享工具(在线ArcGIS,Google驱动器,Dropbox,github,bitbucket等)出现之前,有关文件和文件夹结构的最佳做法。玩。 Update2:而且没有人会说显然是孤立的distutils方法吗?

1
使用python向TOC添加层
我一直在努力在TOC中添加图层。我设法添加了单层,但需要遍历文件夹并添加所有层。我根本无法添加Shapefile。仅图层文件。以下是我所在位置的代码: for layer in shp_List: mxd = arcpy.mapping.MapDocument("CURRENT") dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0] outlayer = lyr layerfile = os.path.join(base_Folder, lyr + ".lyr") arcpy.MakeFeatureLayer_management(layer, outlayer) arcpy.SaveToLayerFile_management(outlayer, layerfile, "ABSOLUTE") addlayer = arcpy.mapping.Layer(layerfile) arcpy.mapping.AddLayer(dataFrame, addlayer, "BOTTOM") #addLayer = arcpy.mapping.Layer(layer) #arcpy.mapping.AddLayer(dataFrame, addLayer, "BOTTOM") #arcpy.RefreshTOC() #arcpy.RefreshActiveView() del addlayer, mxd 上面的代码会将每一层添加到目录中,然后将其删除,然后添加下一层。整个脚本完成后,目录中什么都没有了。我尝试将此脚本添加到模型中并创建一个派生的输出参数,然后将其作为模型参数添加,并选中“添加到显示”。我还检查了地理处理选项,以确保选中了要添加到显示的框。我正在运行Arc 10(无Service Pack)。有人可以帮忙吗?

2
使用arcpy.RasterToNumPyArray保持空间参考?
我正在使用ArcGIS 10.1,并想基于两个现有的栅格创建一个新栅格。该RasterToNumPyArray有,我要适应一个很好的例子。 import arcpy import numpy myArray = arcpy.RasterToNumPyArray('C:/data/inRaster') myArraySum = myArray.sum(1) myArraySum.shape = (myArray.shape[0],1) myArrayPerc = (myArray * 1.0)/ myArraySum newRaster = arcpy.NumPyArrayToRaster(myArrayPerc) newRaster.save("C:/output/fgdb.gdb/PercentRaster") 问题在于它会剥夺空间参考以及像元大小。我认为它必须做arcpy.env,但是如何根据输入栅格设置它们呢?我想不明白。 接受卢克的回答,这是我的解决方案。 Luke的两种解决方案都可以正确设置空间参考,范围和像元大小。但是第一种方法不能正确地在数组中传送数据,并且输出栅格到处都填充有nodata。他的第二种方法大多数情况下都有效,但是在我的无数据区域很大的地方,它填充有块状零和255。这可能与我处理nodata单元的方式有关,而且我不太确定自己的操作方式(尽管应该是另一个Q)。我包括了我正在谈论的图像。 #Setting the raster properties directly import arcpy import numpy inRaster0='C:/workspace/test0.tif' inRaster1='C:/workspace/test1.tif' outRaster='C:/workspace/test2.tif' dsc=arcpy.Describe(inRaster0) sr=dsc.SpatialReference ext=dsc.Extent ll=arcpy.Point(ext.XMin,ext.YMin) # sorry that i modify calculation …

1
ArcGIS 10中的“字段映射”-ArcPy
我编写了一个Python脚本,该脚本执行空间连接和一些简单的计算。我的问题是为一个特定字段设置合并规则,而其余字段保持不变。例如,我有一个人口字段,当按空间位置连接时,使用合并规则“ First”,该规则将捕获“人口”计数的第一个匹配项。我希望能够将合并规则设置为“总和”,以在另一个多边形的空间范围内找到的所有多边形之间添加总体值。 我对场图和场图对象做了一些细致的修改,但似乎无法使其正常工作。具体来说,我尝试了以下方法:popFieldMap.mergeRule ='Sum'来设置mergeRule,但是它始终恢复为“ First”。 有什么想法可以通过编程方式更改Spatial Join中一个字段的合并规则吗? 谢谢! 这是我的代码(请记住,它非常特定于我的数据,并且包含用于测试脚本某些阶段的行): import arcpy,sys,os #Get the Files involved, set some variables. SectorTable = sys.argv[1] SectorShape = sys.argv[2] MaxDev = sys.argv[3] PopulationFC = sys.argv[4] OutputFC = sys.argv[5] DeviationField ="Angle_Deviation" ID = "SectorID" newID = "BP_ID" mxd = arcpy.mapping.MapDocument('CURRENT') df = arcpy.mapping.ListDataFrames(mxd)[0] #Check to see …

2
删除内存表视图?
在Python脚本中,我循环浏览了数千个Excel文件,并使用arcpy.MakeTableView从每个文件的第一个扩展名创建内存表视图。如何删除对内存视图的引用?我试着删除存储表名的变量,但无济于事。 tblView = sheetName arcpy.MakeTableView_management(excelSheet, tblView, .....) ## Process the table here del tblView 删除引用的原因是在某些情况下,工作表名称在Excel文件中重复。如果已使用名称“ Sheet1”创建了一个表视图,则无法创建另一个具有相同名称的表视图。另外,由于要处理的Excel文件的数量和大小,如果在脚本的整个生命周期中保留所有这些表视图,我担心会影响性能。
13 arcpy 

2
多重处理错误-ArcGIS实施
我想知道这里的社区中是否有人尝试使用多重处理进行空间分析。也就是说,我试图遍历一系列栅格,为每个栅格创建一个多处理作业,并通过一个def函数中的多个地理处理步骤运行它们。遵循以下原则 def net(RasterImage, OutFolderDir): arcpy.env.overwriteOutput = True arcpy.env.workspace = OutFolderDir DEM_Prj = DEM_Prj.tif try: arcpy.ProjectRaster_management(RasterImage, DEM_Prj.... FocalStatistics(DEM_prj....) ... if __name__ == '__main__': InputFolder = r'C:\test\somepath' Output = r'C:\test\somepath2' arcpy.env.workspace = InputFolder arcpy.env.scratchWorkspace = r'C:\test.gdb' fcs = arcpy.ListRasters('*') pool = multiprocessing.Pool(4) jobs = [] for fc in fcs: rIn = os.path.join(InputFolder,fc) …

1
使用ArcPy进行文件验证?
我有一个脚本,可以扫描目录并输出基本的栅格数据信息,例如文件名,格式,波段数等。如果目录不包含栅格数据(即其他任何东西),我需要一种方法而不是栅格数据),则会显示一条消息,指出目录的数据类型不正确。 我知道ArcPy具有Describe()可用于确定文件夹中数据类型的功能,但不确定如何实现它。这是我到目前为止所拥有的: rasterList = arcpy.ListRasters("*", "ALL") filesType = arcpy.DataType('RasterDataset') # Can use `DatasetType` as well. # I've tested this function to describe # raster data and ArcPy prints out # 'RasterDataset', that is why I have it # there in the brackets. for name in rasterList: if rasterList == filesType: …
13 arcpy 


3
如何在arcpy脚本中使用sys.exit(0)提前退出而不显示错误消息?
我有一个用于ArcGIS 10.0的arcpy工具脚本,该脚本包含两个主要的功能部分。用户可以选择是否运行第二部分。如果用户选择不运行第二部分,我只想运行清理功能并使用sys.exit(0)退出脚本,而不会在工具结果窗口中发布错误消息。 GIS-SE中有两个主要线程与退出arcpy脚本有关,但是其中的解决方案并未专门解决错误消息。该代码的一般结构如下: import sys ##import arcpy def CleanUp(): print 'Cleaning up ...\n' def finish(): CleanUp() print 'Exiting ...' sys.exit(0) do_more = False #or True ... input from user #Section 1: do some stuff print 'Doing some stuff ...\n' if not do_more: finish() #Section 2: do more stuff print 'doing …

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.