# Create Geoprocessing Object
import sys, os, arcgisscripting
import arcpy
from arcpy import env
gp = arcgisscripting.create()
#I DONT UNDERSTAND WHAT IS THE WILDCARD IN THIS EXAMPLE AND HOW CAN I CHANGE IT TO SO THAT IT CAN BE USED IN MY SCRIPT
# Usage string
usage = "<input_workspace> <projection> {data_type} {wildcard} {type} {overwrite_projection}"
# Set some global variables...
# Set wildcard for data filter. Default is * (all)
wildcard = "*"
# Set type for data filter. Default is ALL
type = "ALL"
# Set boolean for overwriting projection definition. Default is YES (true).
bOverwriteProjection = True
# Set boolean for branching into subdirectories. Default is NO (false).
bRecursive = 0
def DefineProjection(inputWorkspace):
gp.AddMessage("Searching for data in " + inputWorkspace)
##print inputWorkspace
gp.workspace = inputWorkspace
#Loop through each featureclass in input workspace and define a projection
if data_type == "FEATURES":
datasets = gp.listfeatureclasses(wildcard, type)
dataset = datasets.Next()
else:
#data_type is RASTERS
datasets = gp.listrasters(wildcard, type)
dataset = datasets.Next()
while dataset:
# If {overwrite_projection} is NO,
# check if the feature class has a projection already define by doing a describe.
bDefineProject = 0
if bOverwriteProjection == 0:
gp.AddMessage("Checking " + dataset)
dsc = gp.Describe(dataset)
if dsc.SpatialReference.Name == "Unknown":
bDefineProject = 1
else:
print "Projection already defined and will not be changed."
gp.AddMessage("Projection already defined and will not be changed.")
else:
# {overwrite_projection} is "YES"
bDefineProject = 1
if bDefineProject == 1:
try:
gp.AddMessage("Defining projection for " + inputWorkspace + "\\" + dataset)
gp.defineprojection_management(dataset, prj)
print "Successfully defined projection for " + inputWorkspace + "\\" + dataset
except:
# Print Error Messages
print gp.getmessages(2)
dataset = datasets.Next()
if bRecursive == 1:
if os.path.isdir(inputWorkspace):
lstDir = os.listdir(inputWorkspace)
for dir in lstDir:
subDir = inputWorkspace + "\\" + dir
if os.path.isdir(subDir):
##print "Branching into " + subDir
DefineProjection(subDir)
try:
#Check if all required parameters have been provided.
if len(sys.argv) < 3:
raise Exception, "Invalid number of parameters provided. \n" + "Usage: " + usage
# Set the input workspace environment
inputWorkspace = ("C:\\Animals")
#Check if <input_workspace> exists
if not gp.exists(inputWorkspace):
gp.AddError("Workspace " + inputWorkspace + " does not exist")
raise Exception, "<input_workspace> does not exist."
else:
gp.AddMessage("Input workspace: " + inputWorkspace)
# Set the projection information for multiple featureclasses.
# First set the featureclasses to WGS84 and then Cylindrical Equal Area
prj = r"C:\Program Files (x86)\ArcGIS\Desktop10.0\Coordinate Systems\Geographic Coordinate Systems\World\WGS 1984.prj"
prj = r"C:\Program Files (x86)\ArcGIS\Desktop10.0\"Coordinate Systems\Projected Coordinate Systems\World\Cylindrical Equal Area (world).prj"
# Call the DefineProjection routine
DefineProjection(inputWorkspace)
except Exception, ErrDesc:
gp.AddError(ErrDesc)
print ErrDesc