Select to view content in your preferred language

ArcGIS 10.6 tools working on my computer but not another one

1259
2
04-05-2020 01:41 AM
StéphaneNguyen
New Contributor

Good morning,

I'm new in this community forum (And also in ArcGIS, been only a few weeks I started), so if I need to add more informations, ask me. The problem doesn't come from my PC so it can take some times because I need to contact the chief of the project.


So my problem is:
I made 2 python scripts for an add-in and toolbox but none of them work on his pc. I tried to search on internet about how to solve this issue.

The first script is only calling Contour and fails directly (Errors: 999999 and 010067) and the second one is calling multiple functions of ArcGIS:
The second script is failing on the function called Union.

I asked him to:

- check if all the extensions are enabled -> it is

- check if it was due to him using a GeoDatabase or not, he then tried without the GeoDatabase, it didn't work.
- he tried Contour from the application ArcMap but it still works with the same file.

The zip file contains the whole code for the add-in and toolbox.

Thank you for your time.

error999999‌ arcgis10.6‌ error010067‌ #arcgis toolbox#python addin

0 Kudos
2 Replies
DanPatterson_Retired
MVP Emeritus

the database was not found... error

suggests that there is some path that is being looked for in the script that doesn't exist on his computer.

Downloading a zip and unzipping is a security issue for many,

If the script is not massive, copy and paste the code 

https://community.esri.com/blogs/dan_patterson/2016/08/14/script-formatting

StéphaneNguyen
New Contributor
"""
Raster to classified polygons:

Transform a raster into polygons with classified attributes. Only 2 classes,
one above the sea level, one under the sea level.
"""


# Import first the arcpy functions for python
import arcpy, os
from arcpy import env
from arcpy.sa import *
import pythonaddins

import tempfile, shutil

arcpy.AddMessage("IMPORTANT: Please don't interrupt even if it takes a long time.")

#https://docs.python.org/3/library/tempfile.html
# Need to manually cleanup.
TMPpath= tempfile.mkdtemp(prefix="TMP",dir=os.path.dirname(__file__))

# Temporary files
outputTmp = os.path.join(TMPpath, "TMPPolygon.shp") # for raster to polygon
outLayerTmp = os.path.join(TMPpath, "TMPLayer.shp") # For Feature class to Feature Layer.
outputUnionTmp = os.path.join(TMPpath, "TMPUnion.shp") # For Union

arcpy.AddMessage("Created TMP Folder and files. If error or interruption, please remove them manually")
################################ Fetching the parameters ################################

# To fetch the parameters from the tool, you need to use the arcpy.GetParameterAsText()
# function. The number inside the brackets indicates which parameter you will get.
# You fetch the input parameters and the output parameters the same way.

inRaster = arcpy.GetParameterAsText(0) # Raster.
sea_level = arcpy.GetParameterAsText(1) # Sea level as baseContour
outputPolygons = arcpy.GetParameterAsText(2) # For polygons

# For raster to classified polygons,
# we set the raster, sea_level and outputPolygons using the inputs (and output)
# parameters of the tool and we manually set the contour interval.

# Check extension.
arcpy.CheckOutExtension("Spatial")

################################ Calling the functions ################################
# I follow the same procedure as described in my gitlab (French)
# https://gitlab.unige.ch/mit_gcm/project/-/tree/master/Classification%2FManual

#-------------------------------------------------------------------------------------
# Multiply by 1000 to be able to use the other functions because the other functions
# need "integer raster" as input.
outTimes = Times(inRaster, 100) # https://pro.arcgis.com/en/pro-app/tool-reference/spatial-analyst/times.htm
# Don't save it .

ELEVATION=int(float(sea_level)*100) # sea_level * 100

#-------------------------------------------------------------------------------------
# Reclassify the outTimes using elevation/sea_level -> Still a raster
# https://pro.arcgis.com/en/pro-app/tool-reference/spatial-analyst/reclassify.htm

# Before doing it, we need the minimum and maximum values of the raster:
#https://gis.stackexchange.com/questions/175352/how-to-get-max-and-min-from-a-raster-using-arcpy
minRaster = arcpy.GetRasterProperties_management(outTimes, "MINIMUM").getOutput(0) # careful it's still multiplied by 100.
maxRaster = arcpy.GetRasterProperties_management(outTimes, "MAXIMUM").getOutput(0)

# Because it has a problem of , instead of . for float..
# https://community.esri.com/thread/170917

minRaster=int(float(minRaster.replace(',','.'))  )#-757661
maxRaster=int(float(maxRaster.replace(',','.'))  )#503611



# More informations :https://desktop.arcgis.com/fr/arcmap/10.3/tools/data-management-toolbox/get-raster-properties.htm
# https://desktop.arcgis.com/fr/arcmap/latest/tools/spatial-analyst-toolbox/reclassify.htm
# Now reclassify using RemapRange:
arcpy.AddMessage("0/5: Reclassifying Modified Raster..")
outReclass = Reclassify(outTimes, "Value", 
                         RemapValue([[minRaster,ELEVATION, 0],[ELEVATION,maxRaster, 1]])) #Only 2 classes

arcpy.AddMessage("1/5: Reclassifying Modified Raster.. DONE")
# Class 1 : Upper the sea-level.


# Now change it into polygons using Raster to Polygon:
arcpy.AddMessage("1/5: Reclassified Raster to Polygons..")
arcpy.RasterToPolygon_conversion(outReclass, outputTmp, "NO_SIMPLIFY")
arcpy.AddMessage("2/5: Reclassified Raster to Polygons.. DONE")
# instead outputPolygons, use temporary files. Need to remove all of them
# after finishing.

# "Cleaning polygons", creating one layer of continent.

# outLayerTmp is a feature layer
arcpy.AddMessage("2/5: Feature class to Feature layer..")
arcpy.MakeFeatureLayer_management(outputTmp, outLayerTmp, '"gridcode"=1') # only over the ocean level 
arcpy.AddMessage("3/5: Feature class to Feature layer.. DONE")

#arcpy.SelectLayerByAttribute_management(outputTmp, 'NEW_SELECTION', '"gridcode"=1')
arcpy.AddMessage("3/5: Union/Removing Gaps..")
arcpy.Union_analysis(outLayerTmp, outputUnionTmp, gaps=False) #no GAPS !!
arcpy.AddMessage("4/5: Union/Removing Gaps..DONE")

# Aggregate polygons (We will lose the gridcode column)
# Dissolve(in_features, out_feature_class, {dissolve_field}, {statistics_fields}, {multi_part}, {unsplit_lines})
arcpy.AddMessage("4/5: Dissolving polygons..")
arcpy.Dissolve_management(outputUnionTmp, outputPolygons)
arcpy.AddMessage("5/5: Dissolving polygons/Merging.. DONE")

#https://stackoverflow.com/questions/1557351/python-delete-non-empty-dir
# Extremely dangerous, better to remove one by one later.
shutil.rmtree(TMPpath,ignore_errors=True)
try: 
    os.rmdir(TMPpath) 
    arcpy.AddMessage("Removed TMP directory")
except OSError as error: 
    arcpy.AddMessage("Cannot remove TMP directory")


# I need to do this later: https://docs.python.org/3/library/signal.html
# in case of signals.. need to remove the folder.‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

I'm not sure to understand if I need to edit my post or post like this. This is biggest script above. Below, it's the script for Contour:

# coding: utf-8

# Import first the arcpy functions for python
import arcpy
from arcpy import env
from arcpy.sa import *
import pythonaddins

################################ Fetching the parameters ################################

# To fetch the parameters from the tool, you need to use the arcpy.GetParameterAsText()
# function. The number inside the brackets indicates which parameter you will get.
# You fetch the input parameters and the output parameters the same way.

input = arcpy.GetParameterAsText(0)
sea_level = arcpy.GetParameterAsText(1)
output = arcpy.GetParameterAsText(2)

################################ Calling the function ################################

# To call the function you need to specify the parameters. For this function,
# we set the raster, base contour (contour height) and out contour using the inputs (and output)
# parameters of the tool and we manually set the contour interval.

inRaster = input
contourInterval = 10000
baseContour = sea_level
outContour = output

# We then call the function using the parameters previously defined
Contour(inRaster, outContour, contourInterval, baseContour)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

And the last code is the addin file.

import arcpy
import pythonaddins

import os
# Link the toolbox with the add-in using relative path.
# The add-in or the toolbox shouldn't be moved somewhere else.
relativePath = os.path.dirname(__file__)
toolboxPath = os.path.join(relativePath, "MITgcmPlus.tbx")

# Each class can be a button or combox etc.

class ButtonClass17(object):
    """Implementation for MITgcmPlus_addin.button_1 (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        # Calling the toolbox
        pythonaddins.GPToolDialog(toolboxPath, "RasterToClassifiedPolygons")  


class ButtonClass3(object):
    """Implementation for MITgcmPlus_addin.button (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        # Calling the toolbox
        pythonaddins.GPToolDialog(toolboxPath, "Contour")  

class ComboBoxClass4(object):
    """Implementation for MITgcmPlus_addin.combobox (ComboBox)"""
    def __init__(self):
        self.items = ["item1", "item2"]
        self.editable = True
        self.enabled = True
        self.dropdownWidth = 'WWWWWW'
        self.width = 'WWWWWW'
    def onSelChange(self, selection):
        pass
    def onEditChange(self, text):
        pass
    def onFocus(self, focused):
        pass
    def onEnter(self):
        pass
    def refresh(self):
        pass‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

"suggests that there is some path that is being looked for in the script that doesn't exist on his computer." : Do you know a way (know a post) to show more informations about the errors ?
Thank you

0 Kudos