Questions tagged «arcpy»

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

1
使用LiDAR数据提取建筑物(改进流程)
我有以下过程,可以从Las文件自动创建建筑轮廓/足迹,并且想知道是否有人可以帮助改进它或对使用其他过程有建议? 实验: 答:ArcGIS-Lidardataset工具:虽然您只能看到建筑类点,但不能自动创建多边形。边界几何最小,但是从整体上看数据集时,它需要您手动为每个建筑物选择点。 B.守望先锋的外部激光雷达分析工具 -建筑物提取是一项核心功能。http://www.featureanalyst.com/lidar_analyst.htm(已不再使用-2014年7月28日) 创建裸露的地球(基本)大约需要8分钟,然后提取建筑物。到目前为止,即使在树下捕捉建筑物,它也能提供最佳效果(1&4)。这是一个非常直观的界面,甚至不需要看教程。 一些问题是它错过了覆盖的走廊(3),但正确地遗漏了敞开的屋顶(2)。 C. LASTOOLS-使用lasmerge合并4个相关图块,然后使用lasclip仅提取AOI区域。 arcpy.lasboundary("AOI.las","1","buildings","true","true","shp","AOI_buildings.shp","","#","true") 输出非常锯齿,所以我使用了: arcpy.SimplifyBuilding_cartography("AOI","AOI_buildings_simplified.shp","4 Meters","0 SquareMeters","NO_CHECK") 然后运行: arcpy.SimplifyPolygon_cartography("AOI_buildings_simplified","AOI_s.shp","POINT_REMOVE","1 Meters","0 SquareMeters","NO_CHECK","KEEP_COLLAPSED_POINTS") 图1和2显示了问题区域。部分原因是由于激光雷达分类不良。 这为长直边建筑物提供了良好的建筑线条,但是如果分支重叠,或者它是一栋具有多个边缘的复杂建筑物,并且多个楼层的屋顶彼此靠近等,则对于任何详细的场地级别工作,都必须手动创建。对于总体估计屋顶形状,该过程足够准确。该过程完成后,整个过程总共不到10分钟。 我的研究:https : //stackoverflow.com/questions/5037588/simplified-or-smooth-polygons-that-c​​ontain-the-original-detailed-polygon和@gromix建议的过程以及定义,算法和实际解决方案是什么凹面船体?

2
在ArcGIS中优化Multcore处理的方法
我对学习方法有兴趣,以充分利用台式计算机上可用的多核处理能力。Arc指出,后台地理处理允许用户利用多个核心,但是,任务本质上必须排队等待上一个任务完成。 是否有人在Arc / Python中开发了并行或多线程地理处理方法?是否存在阻止单个任务进行多核处理的硬件瓶颈? 尽管不是地理处理示例,但我在Stackoverflow中找到了一个有趣的示例,引起了我的兴趣: from multiprocessing import Pool import numpy numToFactor = 976 def isFactor(x): result = None div = (numToFactor / x) if div*x == numToFactor: result = (x,div) return result if __name__ == '__main__': pool = Pool(processes=4) possibleFactors = range(1,int(numpy.floor(numpy.sqrt(numToFactor)))+1) print 'Checking ', possibleFactors result = pool.map(isFactor, …

1
ArcPy在编写相邻的多部分几何图形时会添加错误的内圈吗?
使用Arcpy将多部分几何体写入shapefile时,我遇到了一个奇怪的问题。我正在使用InsertCursor从零件列表创建一个多零件特征,每个零件都有一个顶点对列表。我了解创建此功能后,相邻的多个零件会自动“溶解”为单个零件。但是由于某种原因,这会创建一个内部环,即使我没有像添加内部环通常所需的那样在数组中包括Null arcpy.point()。这是一个可视化: 有谁知道为什么会这样和/或如何解决这个问题? 供参考,这是我的代码: import arcpy arcpy.CreateFeatureclass_management(r"C:\temp", "test.shp", "POLYGON") OutputCursor = arcpy.InsertCursor(r"C:\temp\test.shp") # List of parts, each with list of vertex pairs ListOfParts = [] ListOfParts.append([[0,1],[1,1],[1,0],[0,0],[0,1]]) ListOfParts.append([[0,2],[1,2],[1,1],[0,1],[0,2]]) ListOfParts.append([[0,3],[1,3],[1,2],[0,2],[0,3]]) ListOfParts.append([[1,1],[2,1],[2,0],[1,0],[1,1]]) ListOfParts.append([[1,2],[2,2],[2,1],[1,1],[1,2]]) ListOfParts.append([[1,3],[2,3],[2,2],[1,2],[1,3]]) ListOfParts.append([[2,1],[3,1],[3,0],[2,0],[2,1]]) ListOfParts.append([[2,2],[3,2],[3,1],[2,1],[2,2]]) ListOfParts.append([[2,3],[3,3],[3,2],[2,2],[2,3]]) # Array of parts to be passed to newRow() ArrayOfParts = arcpy.Array() # Add parts to …

5
使用ArcPy在ArcGIS Desktop中批量剪切?
对于较旧版本的ArcGIS,我遇到了一些类似的问题,但是找不到适用于ArcGIS 10的合适答案。 我有两个覆盖整个区域(例如整个州/省)的多边形shapefile。第一个shapefile代表整个州的土地覆盖,第二个shapefile代表50个单独的分水岭。我想根据每个分水岭(每个字段在字段中存储一个唯一的名称)来裁剪土地覆盖图形文件。然后,我想使用分水岭名称保存输出的裁剪文件(50个分水岭中的每一个)。 假设要执行50个剪辑,此过程非常适合批处理。

5
编译使用ArcGIS地理处理工具的Python脚本(至.exe)?
我已经使用Python编写代码已有几个月了,并且已经为主要的地理处理任务开发了一些相当复杂的脚本。话虽这么说,但由于我来自SQL / VBA / VBScript背景,因此我仍在学习很多东西。 我知道编译后的代码通常比语言解释器要处理的代码运行得更快,因此我对将地理处理Python脚本编译为.EXE文件以处理大数据的可能性感兴趣。 这有可能吗?如果是,那么编译正在导入arcgisscripting或arcpy模块的Python(.py)脚本的最佳方法是什么? 我花了几分钟试图找到我想做的事,搜索结果返回了这篇文章,其中包括:http : //www.ehow.com/how_2091641_compile-python-code.html 编译器似乎可以工作,但是在执行生成的.EXE文件时,出现了一个神秘错误,表明某些文件不可用。 Python脚本可以从命令行正常运行,但是我想知道如果我能够编译.py文件,是否可以看到一些细微的改进。同样,我正在处理一些需要20多个小时才能处理的大型数据集(从输入的水质采样点确定流域)。我会采取一切我可以改进的方式。 使用一组测试站点,与从ArcCatalog的新工具箱中将脚本设置为脚本工具相比,从命令行在ArcGIS外将脚本运行速度提高了10%。我一直从命令行运行脚本,而没有在专用计算机上打开的任何ArcGIS实例。 因此,是否可以编译导入arcgisscripting模块并调用ArcToolBox工具的Python脚本? 编辑 感谢您的输入,这对我很有帮助。该脚本主要是一种协调许多ArcGIS工具并以所需格式/位置/具有适当属性的输出的方式。我认为通过写临时文件夹而不是临时栅格文件的临时个人地理数据库,可以减少一些麻烦,因此可以将它们存储为ESRI GRID格式和IMG格式。我将检查探查器的建议。 我办公室里有一些人对Python提出质疑,主要是说与经过编译的Visual Basic程序或VB.NET程序相比,“经过编译的代码比通过解释器运行的代码要快得多”,但这是一个很好的观点,无论哪种方式,工具都将花费时间。而且,似乎对于当今的计算机而言,解释代码可能不会比编译后的代码慢那么多,以保证可以加倍努力。 编辑 -使用光栅格式更新程序的优化。 想跟进我对该Python程序的“优化”,并且通过将临时栅格写入GRID格式而不是个人地理数据库中,从而节省了2个小时的处理时间。不仅如此,数据大小的磁盘空间消耗显着减少。我最初编写所有栅格的过程(它们只是转换为栅格的点要素,然后是分水岭的栅格),仅这些文件就产生了37.1 GB的数据。将后两个数据输出以GRID格式写入文件夹时,数据减少到667 MB。 我很想知道文件GDB如何处理这些数据,尽管主要是通过数据大小来实现的。但是,将我的处理时间从9.5小时减少到7.5小时肯定足以倡导以GRID格式处理地理数据库之外的栅格。

1
在Virtualenv下运行ArcGIS 10.0
我正在研究一个Python程序包,该程序包混合了命令行工具和ArcToolbox工具。对于Python开发,使用VirtualEnv非常有用,尤其是在使用安装程序时。是否有一种方法可以让ArcMap或ArcCatalog识别Python中的当前VirtualEnv会话,以便在执行自定义工具时,它使用VirtualEnv Python路径和软件包,而不是c:\ Python26 \ ArcGIS10的默认Python路径和软件包。 .0?


2
使按钮将Python脚本称为命令而不是脚本工具?
我相信在Arc9.3中,可以使用VBA脚本创建命令。要添加自定义命令,请导航至“自定义”>“工具栏”>“自定义...”,然后单击“ UIControls”。但是,UIControls在版本10中不存在。 我正在为地图册项目创建两个单独的脚本。一个脚本会将布局设置保存到表中,另一个脚本将使用同一表中的设置更新布局。我希望这两个脚本都是分配给工具栏中按钮的命令。我将它们创建为脚本工具,但是只要单击它们,它们就会将脚本作为地理处理工具运行。它打开了一个进度窗口,执行时间比在Python命令行窗口中运行代码要长10倍。我不需要进度窗口或更长的执行时间。 如何使脚本不被视为“工具”,而是类似于“保存”按钮的命令?

3
在arcpy.ListFeatureClasses中使用多个通配符参数
我知道必须有一种方法可以做到这一点,但是我很难弄清楚该怎么做。我想创建一个要素类列表以对其执行操作,但是,我希望该列表包含要素类,这些要素类具有2个单独且不同的文件名标识符。代码如下所示: FCS = arcpy.ListFeatureClasses("X_*" OR "*_Y") 我知道OR是不正确的,但是有某种方法可以执行此操作而不必重新编写代码以使用第二个通配符。感谢您帮助痛风,我知道Select By Attributes中有一个选择方法,该方法允许使用OR语句使用多个通配符。
12 arcpy  list  wildcard 

2
为什么ArcPy脚本运行缓慢?
我有一个简单的arcpy脚本,可使用其内的多边形要素中的信息来更新点shapefile中的字段。在arcpy中完成100点需要9分钟,但是arcmap中的空间连接是瞬时的。我敢肯定有一个快速建立的方法可以解决这个问题。有人可以指出我正确的方向吗? import took 0:00:07.085000 extent took 0:00:05.991000 one pt loop took 0:00:03.780000 one pt loop took 0:00:03.850000 one pt loop took 0:00:03.791000 import datetime t1 = datetime.datetime.now() import arcpy t2 = datetime.datetime.now() print "import took %s" % ( t2-t1) #set up environment arcpy.env.workspace = "data\\" arcpy.env.overwriteOutput = True desc = …

2
使用ArcPy查找线的中点?
如何使用地理处理框架(例如在Python脚本中)计算折线的中点? 该polyline.centroid属性返回真正的重心,如果是内或功能; 否则,返回标签点。形心很少位于非直线上,这对我而言毫无用处。 “ 要素顶点折点”工具具有中点选项,但这需要ArcInfo,而我目前没有。 一种选择是向多段线添加度量,并沿该线创建50%的路线事件。 另一个解决方法是在ArcMap中使用“计算几何”选项,但理想情况下,我需要在脚本中自动执行此过程。 有更好/更快的建议吗? 目前,我仅限于ArcGIS 10.0(无法访问ArcInfo级别的许可证)。

1
作为ArcGIS工具的Python脚本性能与独立版本相比
有没有人研究过在ArcToolbox中运行Python脚本与作为独立脚本运行时的区别?我必须编写一个快捷脚本,通过提取波段1将一组RGB图像转换为单个波段。作为一个独立的脚本读写PC,它可以在约350秒内处理1000张相同大小的图像。从ArcToolbox运行相同的脚本大约需要1250秒。 import arcpy import csv from os import path arcpy.env.workspace = in_folder image_list = arcpy.ListRasters() #Create a CSV file for timing output with open(outfile, 'wb') as c: cw = csv.writer(c) cw.writerow(['tile_name', 'finish_time']) #Start the timer at 0 start_time = time.clock() for image in image_list: #Extract band 1 to create a …

1
使用Python禁用Scale map元素与页面大小的变化成比例吗?
我正在使用ArcPy和ArcGIS 10.0在不同办公室的MXD上更改源。正如所观察到这里,打印机设置恢复到默认打印机时发送指令mxd.save()。 在我的情况下,丢失打印机是一个小问题,但是如果在选择“使用打印机纸张设置”时勾选了打印选项“按比例缩放地图元素与页面大小成比例地缩放”,则打印机将变得很重要。下面的屏幕截图是我最坏的情况,最好的情况是取消选中两个复选框。 在保存MXD之前,我想使用comtypes来检查该选项的值并将其设置为False(未选中)-想法是从现有ArcPy脚本中将此函数作为函数来调用。(首要目标) 为了进一步保证打印设置的安全性,我也希望取消选中“使用打印机设置”复选框。(次要目标) 有人可以帮忙吗?

2
在ArcPy的内存工作区中设置?
是否可以env.workspace = "in_memory"使用ArcGIS Pro和ArcGIS 10.2.2(或10.3)体系结构在ArcPy中进行设置? 我想做的是将快照倾点操作的输出写入内存而不是磁盘。 我意识到我可以写入磁盘然后将其带入内存,但这无济于事。我正在尝试优化一系列任务,以最大程度地减少将仅作为下一个过程的输入所需的过程输出写入物理介质。

1
来自Numpy阵列的PySAL自然休息
我正在尝试使用Python从栅格中提取自然中断值。 预期的过程进行如下:将Arcpy栅格对象转换为NumPy Array(使用RasterToNumPyArray)以自然中断值(使用PySAL Natural Breaks函数)。 import arcpy, pysal from pysal.esda.mapclassify import Natural_Breaks as nb # code to create greenIndex arcpy Raster object here greenArray = arcpy.RasterToNumPyArray(greenIndex) breaks = nb(greenArray,k=2,initial=20) 该代码返回错误“ ValueError:矩阵必须为二维”。 据我所知,greenArray是一个二维数组。

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.