คำถามติดแท็ก arcpy

แพคเกจไซต์ที่สร้างโดย Esri เพื่อแสดงตำแหน่งทางภูมิศาสตร์ของ ArcGIS Desktop (ArcMap และ ArcGIS Pro) การประมวลผลการทำแผนที่การทำแผนที่และ Python

4
การนิยามคำอธิบายพารามิเตอร์สำหรับกล่องเครื่องมือ Python ช่วยไหม?
ฉันพยายามสร้างกล่องเครื่องมือหลามสำหรับแอปพลิเคชั่น ArcMap ของเรา (เช่น MyTool.pyt) ฉันจะเห็นว่าข้อความช่วยเหลือถูกกำหนดด้วยแอตทริบิวต์ self.description คลาส อย่างไรก็ตามเมื่อฉันรันโปรแกรมแล้วคลิกลงในฟิลด์พารามิเตอร์ใด ๆ ข้อความช่วยเหลือ / คำอธิบายจะว่างเปล่า ฉันต้องการให้ฟิลด์คำอธิบายสำหรับแต่ละพารามิเตอร์ สิ่งนี้สำเร็จได้อย่างไร หลังจากคำตอบบางอย่างฉันเห็นว่าผ่านเมนูบริบท 'คำอธิบายรายการ' คลิกขวามีหลายฟิลด์ที่อาจมีการเติมข้อมูล มีวิธีการ 'pythonic' ทำเช่นนี้? นั่นคือเพียงฝังคุณลักษณะบางอย่างในคลาสไฟล์. pyt ตัวอย่างเช่นในนิยามกล่องเครื่องมือ. pyt คุณมีคลาสกล่องเครื่องมือ: 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 …

1
คำนวณพื้นที่ภายในสคริปต์ Python ใน ArcMap
ฉันพยายามคำนวณพื้นที่ของรูปหลายเหลี่ยมภายในสคริปต์ Python ของฉัน ฉันสร้างรูปหลายเหลี่ยมใหม่จากการรวมสองรูปเข้าด้วยกันและฉันต้องการเพิ่มพื้นที่ของรูปหลายเหลี่ยมที่เป็นผลลัพธ์ลงในเขตข้อมูลในไฟล์ผลลัพธ์ รูปหลายเหลี่ยมจะถูกเก็บไว้ในรูปร่างปกติและฉาย พื้นที่โดยเฉพาะอย่างยิ่งในหน่วยแผนที่ ฉันคิดว่านี่เป็นงานที่ค่อนข้างธรรมดาและเรียบง่าย แต่ถึงแม้ว่าจะมี Googleing อยู่มากมายฉันก็ยังหาวิธีแก้ปัญหาที่ใช้งานไม่ได้ ฉันวางแผนที่arcpy.updateCursorจะใช้เพื่อแทรกค่าเมื่อคำนวณแล้ว (มีเพียงฟีเจอร์เดียวใน FC ในขั้นตอนนี้) ดังนั้นที่ง่ายที่สุดคือถ้ามันสามารถส่งคืนเป็นตัวแปรได้ โซลูชันทางเลือกใด ๆ ที่ทำภารกิจเดียวกันให้สำเร็จ (การรับค่าพื้นที่ลงในฟิลด์ที่ถูกต้อง) ก็จะใช้ได้เช่นกัน ฉันได้ลองใช้เครื่องคิดเลขภาคสนามจาก Python ด้วย แก้ไขจากหน้าช่วยเหลือฉันคิดว่าสิ่งต่อไปนี้ใช้ได้ แต่ยังไม่มีโชค arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE') exp = "float(!SHAPE.AREA!.split())" arcpy.CalculateField_management(tempPgs, "Shape_area", exp) ใช้งาน ArcGIS Basic 10.1 SP1 ด้วย Python 2.7 บน Windows 7 ส่วนที่เกี่ยวข้องของรหัสปัจจุบันของฉันมีลักษณะดังนี้: #/.../ arcpy.Copy_management(inpgs, outpgs) arcpy.AddField_management(outpgs, …

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
วนรอบ 16 ล้านบันทึกโดยใช้ ArcPy?
ฉันมีตารางที่มี 8 คอลัมน์และประมาณ 16.7 ล้านเรคคอร์ด ฉันต้องใช้ชุดสมการ if-else บนคอลัมน์ ฉันเขียนสคริปต์โดยใช้โมดูล UpdateCursor แต่หลังจากบันทึกไปสองสามล้านครั้งมันมีหน่วยความจำไม่เพียงพอ ฉันสงสัยว่าจะมีวิธีที่ดีกว่าในการประมวลผลระเบียน 16.7 ล้านรายการเหล่านี้หรือไม่ 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, …

5
Python ใช้เพียงหนึ่งคอร์ต่อครั้งเท่านั้นใช่ไหม?
ฉันสังเกตเห็นเมื่อเร็ว ๆ นี้ว่าหลามใช้เพียงหนึ่งคอร์ต่อครั้งในการทำงาน มีวิธีหนึ่งอาจจะสร้างหรือคำสั่งพิเศษเพื่อให้ใช้ทรัพยากรทั้งหมด (คอร์ที่สอง)?

4
การแปลงรูปทรงเรขาคณิตเป็น WKT โดยใช้ ArcPy?
ฉันต้องการที่จะแปลงคุณสมบัติเดียว (หรือคุณสมบัติที่อาจเกิดขึ้นมากมาย) ในเลเยอร์ ArcGIS ในรูปแบบWell Known Text (WKT) ในระหว่างการดำเนินการประมวลผลทางภูมิศาสตร์โดยใช้ Python และ ArcPy (ไม่มีโมดูลที่ไม่ใช่ ArcPy) จุดประสงค์คือส่ง WKT ไปยัง SQL Server Spatial และทำการประมวลผลเพิ่มเติมนอกชุดเครื่องมือ ArcGIS GP มีวิธีการแปลงคุณสมบัติเรขาคณิตของ ArcGIS เป็น WKT ผ่าน ArcPy หรือไม่? ฉันได้อ่านสิ่งต่อไปนี้โดยไม่พบสิ่งที่ฉันเป็นหลังจาก: Shapefiles to Text (อ้างอิงเครื่องมือในกล่องเครื่องมือ "ตัวอย่าง" ที่เลิกใช้แล้ว) แปลงระหว่าง ESRI Geometry และ WKT (ใช้ ArcObjects หรือโมดูลที่ไม่ใช่ ArcPy) วิธีแปลง Shapefile เป็น WKT …
13 arcpy  convert  wkt 

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 แต่ฉันจะตั้งพวกมันตามอินพุตแรสเตอร์ได้อย่างไร ฉันไม่สามารถคิดออก รับคำตอบของลุคนี่คือวิธีแก้ปัญหาเบื้องต้นของฉัน โซลูชันทั้งสองของลุคตั้งค่าการอ้างอิงขอบเขตและขนาดเซลล์อย่างถูกต้อง แต่วิธีแรกไม่ได้เก็บข้อมูลในอาเรย์อย่างถูกต้องและเอาท์พุทแรสเตอร์เต็มไปด้วยข้อมูลทั้งหมด วิธีที่สองของเขาใช้งานได้เป็นส่วนใหญ่ แต่ที่ฉันมีพื้นที่ขนาดใหญ่ของโนดาต้ามันเต็มไปด้วยศูนย์บล็อกและ 255s สิ่งนี้อาจเกี่ยวข้องกับวิธีที่ฉันจัดการเซลล์โนดาต้าและฉันก็ค่อนข้างแน่ใจว่าฉันกำลังทำมันอย่างไร (ควรเป็น Q อีกอันหนึ่ง) ฉันรวมภาพสิ่งที่ฉันพูดถึง #Setting the raster properties directly import …

3
การจัดระเบียบไฟล์สำหรับการแบ่งปันรหัส ArcGIS python
โครงสร้างองค์กรที่ดีที่สุดสำหรับการแบ่งปันรหัสอาร์จีงูหลามและเครื่องมือการประมวลผลทางภูมิศาสตร์คืออะไร? หรือแม้แต่รหัสการใช้งานร่วมกันและเครื่องมือในการแบ่งปันมีการแยกคำถาม Esri มีวิธีการกระจายโครงสร้างเครื่องมือที่เผยแพร่สำหรับ Arcgis 9.3 และ 10.0: อย่างไรก็ตามในสถานที่อื่น ๆผู้คนกำลังพูดถึงสิ่งต่าง ๆ เช่นAlso do avoid distributing your code the way its done in Arc Scripts or Code Galleriesในความโปรดปรานของงูเหลือมดิททิทอล Esri ดูเหมือนจะไม่มีบทความเครื่องมือการแจกจ่ายที่สอดคล้องกันสำหรับ 10.1 ( อ้างอิง ) โดยให้น้ำหนักกับข้อโต้แย้ง GIS.se พูดว่าอะไร? อัปเดต:แม้ว่าอาจจะช้าไป แต่คำถามของคำถามนี้เกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับโครงสร้างไฟล์และโฟลเดอร์ก่อนเครื่องมือที่ใช้สำหรับการแบ่งปัน (arcgis online, google drive, dropbox, github, bitbucket เป็นต้น) เล่น. Update2:และจะไม่มีใครพูดถึงวิธีการกลั่นกรองเด็กกำพร้าที่เห็นได้ชัด?

1
ใช้ python เพื่อเพิ่มเลเยอร์ใน TOC
ฉันได้ต่อสู้กับการเพิ่มเลเยอร์ใน TOC มาระยะหนึ่งแล้ว ฉันจัดการเพื่อเพิ่มเลเยอร์เดียว แต่จำเป็นต้องวนซ้ำผ่านโฟลเดอร์และเพิ่มเลเยอร์ทั้งหมด Shapefiles ฉันไม่สามารถเพิ่มได้เลย ไฟล์เลเยอร์เท่านั้น ด้านล่างเป็นรหัสที่ฉันอยู่: 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, …

1
“ การแมปฟิลด์” ใน ArcGIS 10 - ArcPy
ฉันได้เขียนสคริปต์Pythonที่เข้าร่วมเชิงพื้นที่และการคำนวณง่ายๆ ปัญหาของฉันคือการตั้งค่ากฎการผสานสำหรับเขตข้อมูลหนึ่งโดยเฉพาะและปล่อยให้ส่วนที่เหลือของฟิลด์เหมือนเดิม ตัวอย่างเช่นฉันมีเขตข้อมูลประชากรที่เมื่อรวมตำแหน่งเชิงพื้นที่โดยใช้กฎการรวม"ครั้งแรก"ซึ่งจะจับการนับจำนวนครั้งแรกที่เกิดขึ้น ฉันต้องการที่จะสามารถที่จะตั้งกฎการผสานการ"ซำ"ที่จะเพิ่มค่าประชากรระหว่างทั้งหมดของรูปหลายเหลี่ยมที่พบในขอบเขตพื้นที่ของรูปหลายเหลี่ยมอีก ฉันได้ทำการซ่อมแซมที่รุนแรงด้วยฟิลด์แผนที่และวัตถุการแมปฟิลด์ แต่ดูเหมือนว่าจะทำงานไม่ถูกต้อง ฉันลองใช้วิธีเฉพาะ: popFieldMap.mergeRule = 'Sum'เพื่อตั้งค่า mergeRule แต่จะเปลี่ยนเป็น "First" เสมอ แนวคิดใดที่ฉันสามารถเปลี่ยนกฎการรวมโดยทางโปรแกรมสำหรับเขตข้อมูลหนึ่งในการเข้าร่วมเชิงพื้นที่ได้ ขอบคุณ! นี่คือรหัสของฉัน (โปรดทราบว่ามันค่อนข้างเฉพาะเจาะจงกับข้อมูลของฉันและมีบรรทัดเพื่อทดสอบขั้นตอนบางอย่างของสคริปต์): 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" …

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
ฉันสงสัยว่าคนอื่น ๆ ในชุมชนที่นี่พยายามใช้การประมวลผลหลายอย่างสำหรับการวิเคราะห์เชิงพื้นที่หรือไม่ คือฉันพยายามที่จะวนซ้ำผ่านชุด rasters สร้างงานหลายตัวประมวลผลสำหรับแต่ละและรันพวกเขาผ่านขั้นตอนการประมวลผลทางภูมิศาสตร์จำนวนมากภายในฟังก์ชัน 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 = …

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 …
13 arcpy 


3
ฉันจะใช้ sys.exit (0) ในสคริปต์ arcpy เพื่อออกก่อนได้อย่างไรโดยไม่มีข้อความแสดงข้อผิดพลาดปรากฏขึ้น
ฉันมีสคริปต์เครื่องมือ arcpy สำหรับ ArcGIS 10.0 ที่มีหน้าที่หลักสองประการ ผู้ใช้สามารถเลือกว่าจะรันส่วนที่สองหรือไม่ หากผู้ใช้เลือกที่จะไม่เรียกใช้ส่วนที่สองฉันเพียงต้องการเรียกใช้ฟังก์ชันการล้างข้อมูลและออกจากสคริปต์ด้วย 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 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.