POST
|
Hi Curtis, This essentially turned out to be the culprit. The ESRI support people took almost a month working with me to understand then sort out the issue. Their solution was always to just use a 64bit processing environment; or as a work around, restart the map document as I was doing. Apparently there was some mysterious behind the scenes virtual memory cache (they never really explained this too well) which was becoming overloaded. The script tool which I was running before the dissolve created a DEM. This was loading up the cache. Then when I would run the script tool which called the dissolve geoprocess (which itself has a very high virtual memory requirement) overloaded the cache. This doesn't make a whole ton of sense because from what I understand all virtual memory caches are cleared when a tool is closed. Anyway, it really only poses an issue when working within a 32bit OS. Little late now, but just thought I'd follow up. Thanks for your effort! Cheers
... View more
01-07-2016
05:14 PM
|
1
|
0
|
1034
|
POST
|
It runs flawlessly each time. In fact, it runs flawlessly no matter what raster dataset is input at the top of the script. The problem only arises when I run the 2 script tools which precede this one. They're used to create the raster which is input in this script. However, they also run flawlessly, are very stable, and seem to be bug free. Once the tool errors, it will continue to error unless I close the .mxd and reopen it. Then it will run smoothly again. The only other time the dissolve fails is when I make edits/debug this tool. Once the logic is correct. The dissolve will continue to fail until I restart the .mxd.
... View more
08-25-2015
12:09 PM
|
0
|
3
|
1034
|
POST
|
Granted it is a large script. #---Exception handling.---
except SystemExit:
pass
except KeyboardInterrupt:
arcpy.AddMessage("Interruption requested...exiting script")
except arcpy.ExecuteError:
msgs = arcpy.GetMessages(2)
arcpy.AddError(msgs)
except LicenseException:
arcpy.AddError("ERROR: The BsM 2015 Map Creation Package requires the ArcGIS Advanced(ArcInfo) license. Please see your ArcGIS License Administrator...exiting script.")
except:
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback info:\n" + tbinfo + "\nError Info:\n" + str(sys.exc_info()[1])
msgs = "ArcPy ERRORS:\n" + arcpy.GetMessages(2) + "\n"
arcpy.AddError(msgs)
arcpy.AddError(pymsg)
if arcpy.Exists(DS_F_out):
arcpy.Delete_management(DS_F_out)
finally:
#Clean.
if arcpy.Exists(DS_Polygon):
arcpy.Delete_management(DS_Polygon)
if arcpy.Exists(DS_PS_out):
arcpy.Delete_management(DS_PS_out)
#Check In Extensions.
arcpy.CheckInExtension("spatial")
#Refresh the Table of Contents and Active View windows.
arcpy.RefreshTOC()
arcpy.RefreshActiveView()
#---Include text to improve batch process result readability.---
arcpy.AddMessage("\n")
... View more
08-25-2015
08:24 AM
|
0
|
0
|
1718
|
POST
|
There is no error message. The dissolve completes, but the multiple single part features are not dissolved into a mulitpart feature class.
... View more
08-25-2015
07:43 AM
|
0
|
0
|
1718
|
POST
|
No the area issue is not the concern. The issue is I am trying to create multipart polygons from a series of single part features using ArcPy. The operation is similar to that performed with the editor > merge functionality. This however is not supported with ArcPy. I have found a work around by using feature layer selections and then dissolving on a given field, but the dissolve function is inconsistently failing for some unknown reason. It primarily fails when it has been preceded by other scripts, or when significant modifications have been made to other lines of code within the script which calls the dissolve function. I appreciate the suggestion with the eliminate tool, but I don't think that will solve my problem. Thanks though.
... View more
08-25-2015
07:41 AM
|
0
|
1
|
1718
|
POST
|
Hi Curtis; Great suggestions. However, I just checked the polygons and they're not godzillas. I just got a failure from a dissolve with vertex counts ranging from 30 to 120.
... View more
08-25-2015
07:36 AM
|
0
|
2
|
1718
|
POST
|
I need the functionality of the editor > merge command for use in a python script tool. I realize this function is not directly accessible through ArcPy, but I am hoping someone can help with a work around? The Issue: I have a series of single part polygon features which do not touch or overlap, but have common field values. I need all these features to exist as multipart features for the random point generation to operate properly and consider all these regions equally. However, the dissolve function inconsistently fails leaving single part polygons. Essentially, I am trying to go from single part geometries to multipart by creating feature layer selections and dissolving on that feature layer selection. I have included a code snippet below. The code works and does exactly as required, but it is inconsistent. The dissolve fails when preceded by other scripts or when significant edits with debugging have been made to other parts of this script. However, when called from a new .mxd document it runs consistently well. Any advice and support would be gratefully accepted! Thanks! #Custom exceptions.
class LicenseException(Exception):
pass
#Import system modules.
import arcpy
import sys
import os
import traceback
from arcpy import env
from arcpy.sa import *
#Enable geoprocessor logging.
arcpy.SetLogHistory(True)
try:
#---Check the installed ArcGIS version.---
iv = arcpy.gp.GetInstallInfo()
version = " ArcGIS %s : %s" % ('Version', iv.get('Version','Version Unknown'))
if version.find("10.") > 0:
ArcGIS10 = True
else:
ArcGIS10 = False
arcpy.AddError("ERROR: This tool requires ArcGIS version 10.1 or greater...exiting script.")
sys.exit("")
del iv, version, ArcGIS10
#---Check the ArcGIS administrative license.---
if arcpy.CheckProduct("ArcInfo") == "AlreadyInitialized" or arcpy.CheckProduct("ArcInfo") == "Available":
pass
else:
raise LicenseException()
#---Check out extension licenses.---
if arcpy.gp.CheckExtension("spatial") == "Available":
arcpy.CheckOutExtension("spatial")
else:
arcpy.AddError("ERROR: Spatial Analyst extension is unavailable. Please enable Spatial analyst and try again...exiting script.")
sys.exit("")
#---Get tool share folder file path.---
mxd = arcpy.mapping.MapDocument("Current")
mxdpath = mxd.filePath
(filepath, filename) = os.path.split(mxdpath)
MCP_Path = str(filepath)
#---Set the geoprocessing environment.---
workspace = MCP_Path + "\OutputData\ToolOut.gdb"
scratchspace = MCP_Path + "\OutputData\ScratchFolder\Scratch.gdb"
env.scratchWorkspace = scratchspace
env.workspace = workspace
env.overwriteOutput = True
#---Read user input.---
BI = arcpy.GetParameterAsText(0)
BIdesc = arcpy.Describe(BI)
#---Execute Reclass.---
DS_RC_filename = BIdesc.name + "_DS_RC"
DS_RC_out = os.path.join(workspace, DS_RC_filename)
DS_Reclass = Reclassify(BI, "Value",
RemapRange([[-1000,-75,8],[-75,-50,7],[-50,-35,6],[-35,-20,5],[-20,-12,4],[-12,-6,3],[-6,-3,2],[-3,-1,1],[-1,0,"NODATA"]]), "NODATA")
DS_Reclass.save(DS_RC_out)
#---Execute raster to polygon conversion.---
DS_Polygon_filename = BIdesc.name + "_DS_Polygon"
DS_Polygon = os.path.join(workspace, DS_Polygon_filename)
arcpy.RasterToPolygon_conversion(DS_RC_out, DS_Polygon, "SIMPLIFY", "VALUE")
if arcpy.Exists(DS_RC_out):
arcpy.Delete_management(DS_RC_out)
del DS_RC_filename, DS_Polygon_filename
#---Select polygons of areas >= 1000m2.---
DS_PS_out_filename = BIdesc.name + "_DS_PSelect"
DS_PS_out = os.path.join(workspace, DS_PS_out_filename)
sql = '{0} >= {1}'.format("Shape_Area",'1000')
if arcpy.Exists("DS_PS"):
arcpy.Delete_management("DS_PS")
DS_PS = arcpy.management.MakeFeatureLayer(DS_Polygon,"DS_PS",sql)
arcpy.CopyFeatures_management("DS_PS", DS_PS_out) #Done to hopefully stabilize the following selection
arcpy.Delete_management(DS_PS)
del DS_PS_out_filename, sql
#---------------------Perform Dissolve----------------------------------
DS_F_out_filename = BIdesc.name + "_DS"
DS_F_out = os.path.join(workspace, DS_F_out_filename)
arcpy.Dissolve_management(DS_PS_out,DS_F_out,"grid_code","#","MULTI_PART","DISSOLVE_LINES")
del BsMmaxS, sql
#---Check to ensure dissolve function worked properly.---
sql = '{0} = {1}'.format("grid_code",1)
arcpy.MakeTableView_management(DS_F_out, "DS_F_out_TV",sql)
count = int(arcpy.GetCount_management("DS_F_out_TV").getOutput(0))
if count > 1:
del sql
if arcpy.Exists(DS_F_out):
arcpy.Delete_management(DS_F_out)
arcpy.Delete_management("DS_F_out_TV")
arcpy.AddError("Geoprocessing Error due to memory limitations with 32bit processing. Assuming 64bit processing is unavaiable, please close your ArcMap instance, open it again and reprocess...exiting script.")
#Above error prompt is my current best guess since the polygons can be quite complex and can contain many verticies.
sys.exit("")
else:
arcpy.Delete_management("DS_F_out_TV")
del sql
#Continue code here..
... View more
08-24-2015
01:56 PM
|
0
|
14
|
6701
|
Title | Kudos | Posted |
---|---|---|
1 | 01-07-2016 05:14 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|