I have been given the task of taking a script that was made by someone who has left and altering where it saves the files. This is originally a simple folder system but we are moving over to file geodatabases. When executing the script I get the following message it tries to create a site boundary based on a shapefile created by user inputting easting and northings if a site boundary shp has not been provided.
This is the traceback error I am getting. the only thing I have added is to the os.pathjoin with what was previously the folder to the gdb variable that can be selected as parameter 8:
"Traceback (most recent call last): File "D:\Python Scripts\Scripts\Scripts\Tender GIS script Test .py", line 78, in arcpy.Buffer_analysis(inLocation, searchArea, studyAreaSize,"","","ALL") File "c:\program files (x86)\arcgis\desktop10.8\arcpy\arcpy\analysis.py", line 768, in Buffer raise e ExecuteError: ERROR 000210: Cannot create output D:11111円\GIS\Database1111111円_Project.gdb10000円_10000_StudyArea_.shp Failed to execute (Buffer)."
from arcpy.sa import *
#--- Tool input parameters ------------------------------------------------------------------------------
# siteBoundaryType = Site boundary type - Boundary/Coordinates (Value List String)
siteBoundaryType = arcpy.GetParameterAsText(0)
# inLocation = Site plan or points (Feature layer) - optional
inLocation = arcpy.GetParameterAsText(1)
# eastingIn = Coordinate option easting (String) - optional
eastingIn = arcpy.GetParameterAsText(2)
# northingIn = Coordinate option northing (String) - optional
northingIn = arcpy.GetParameterAsText(3)
# studyAreaSize = Study area buffer size (metres) (String)
studyAreaSize = arcpy.GetParameterAsText(4)
# siteName = Site name (String)
siteName = arcpy.GetParameterAsText(5)
# projectNumber = Project number (String)
projectNumber = arcpy.GetParameterAsText(6)
# GISFolder = Location of GIS folder (Folder)
GISFolder = arcpy.GetParameterAsText(7)
#GeodatabaseLocation - location of geodatabase (workspace)
gdb = arcpy.GetParameterAsText(8)
#Data Location - where to get the Data from (String)
dataFrom = arcpy.GetParameterAsText(9)
# --------------------------------------------------------------------------------------------------------
# --- Check out Spatial Analyst --------------------------------------------------------------------------
arcpy.CheckOutExtension("Spatial")
arcpy.env.overwriteOutput = True
# --------------------------------------------------------------------------------------------------------
#create set up folders for the working files-------------
workingVector = os.path.join(GISFolder, "VectorWorking")
workingRaster = os.path.join(GISFolder, "RasterWorking")
# Create folders
arcpy.CreateFolder_management(GISFolder, "VectorWorking")
arcpy.CreateFolder_management(GISFolder, "RasterWorking")
# Define British National Grid for new datasets ----------------------
bng = "PROJCS['British_National_Grid',GEOGCS['GCS_OSGB_1936',DATUM['D_OSGB_1936',SPHEROID['Airy_1830',6377563.396,299.3249646]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',400000.0],PARAMETER['False_Northing',-100000.0],PARAMETER['Central_Meridian',-2.0],PARAMETER['Scale_Factor',0.9996012717],PARAMETER['Latitude_Of_Origin',49.0],UNIT['Meter',1.0]]"
# --------------------------------------------------------------------
# Check input type - if a coordinate then create point ---------------
if siteBoundaryType == "Coordinates":
point = arcpy.Point()
pointGeometryList = []
# Location from input X and Y
point.X = eastingIn
point.Y = northingIn
# Create a point from XY
pointGeometry = arcpy.PointGeometry(point)
pointGeometryList.append(pointGeometry)
# Temporary point shapefile location
tmpPointLocation = os.path.join(workingVector, "SitePoint.shp")
# Create temporary point shapefile
arcpy.CopyFeatures_management(pointGeometryList, tmpPointLocation)
# Set as BNG
arcpy.DefineProjection_management(tmpPointLocation, bng)
# Set as site location
inLocation = tmpPointLocation
# --------------------------------------------------------------------
# Check inLocation geometry type - is it a point, line or polygon? ---
inLocationGeometryDesc = arcpy.Describe(inLocation)
inLocationGeometry = inLocationGeometryDesc.shapeType
# --------------------------------------------------------------------
# Create study area -----------------------------------------------------------------
arcpy.AddMessage("Creating the study area")
arcpy.SetProgressorLabel("Creating the study area")
studyAreaPrefix = projectNumber + "_" + siteName + "_StudyArea"
searchArea = os.path.join(gdb,(projectNumber + "_" + siteName + "_StudyArea_" + ".shp"))
# Buffer...#
arcpy.Buffer_analysis(inLocation, searchArea, studyAreaSize,"","","ALL")
arcpy.MakeFeatureLayer_management (searchArea, "searchArea_lyr")
# ----------------------------------------------------------------```
1 Answer 1
You're trying to stuff a shapefile into a geodatabase. And you can't do that. Additionally, you're starting the name with a number. It should start with a letter.
Per your code:
searchArea = os.path.join(gdb,(projectNumber + "_" + siteName + "_StudyArea_" + ".shp"))
, the error makes sense:
D:11111円\GIS\Database1111111円_Project.gdb10000円_10000_StudyArea_.shp
You need to pick, are you making .shp
or classes in a gdb
. The quickest way to get it to run is to remove the + '.shp'
from the referenced code and add a letter in front of your "10000" (This appears to be coming from projectNumber
, so the whole fix would look like:
searchArea = os.path.join(gdb,("a_" + projectNumber + "_" + siteName + "_StudyArea_"))
-
Thanks @Khimba I have removed (why I didnt see that before) But now when I test it I am getting this error (change the name of things during the test) ERROR 000210: Cannot create output D:11111円\GIS\Database\New File Geodatabase.gdb18881円_hgfhfhf_StudyArea Failed to execute (Buffer)Tom Piggott– Tom Piggott2022年01月28日 17:14:05 +00:00Commented Jan 28, 2022 at 17:14
-
Now I think about it I think featureclass names should not start with a number?Hornbydd– Hornbydd2022年01月28日 17:34:25 +00:00Commented Jan 28, 2022 at 17:34
-
Correct, dont start with a number. I'll add that into my answerKHibma– KHibma2022年01月28日 18:07:13 +00:00Commented Jan 28, 2022 at 18:07
-
ahh that might cause an issue then as we use numbers to define the project it is on so we usually have ProjectNumber_ProjectName. I guess we could probably switch that around. Or if i converted it from featureclass to geodatabase that might workTom Piggott– Tom Piggott2022年01月28日 18:36:51 +00:00Commented Jan 28, 2022 at 18:36
Explore related questions
See similar questions with these tags.
10000_10000_StudyArea_
not10000_10000_StudyArea_.shp
.