|
POST
|
Not sure what the issues is. Hope this example helps: #Process: Creates a FGDB to hold all the spatial layers
fgdbName = "pls"
fgdbPath = gp.workspace + "\\" + fgdbName + ".gdb"
gp.CreateFileGDB_management(gp.workspace, fgdbName); showGpMessage()
#Process: Define the path of a bunch of admin layers
adminFC = root + "\\gis_layers\\admin.gdb\\admin"
countyFC = root + "\\gis_layers\\county.gdb\\county"
districtFC = root + "\\gis_layers\\district.gdb\\district"
parcelFC = root + "\\gis_layers\\parcel.gdb\\parcel"
regionFC = root + "\\gis_layers\\region.gdb\\region"
#Process: unions everything together
union1FC = fgdbPath + "\\union1"
gp.Union_analysis(countyFC + ";" + regionFC + ";" + adminFC + ";" + districtFC + ";" + parcelFC, union1FC, "ALL", "", "GAPS"); showGpMessage()
... View more
07-28-2010
09:02 AM
|
0
|
0
|
841
|
|
POST
|
True, I guess I didn't read the requirements very well:o Concatenation: A + B = AB. Requirements description: If A or B then A or B, else nothing
... View more
07-28-2010
08:40 AM
|
0
|
0
|
1282
|
|
POST
|
The correct Python syntax is to use a semicolon to delimit the input FCs. gp.union_analysis(siteloc + ";" + zonelayer, "output_union.shp", "NO_FID")
... View more
07-28-2010
08:20 AM
|
0
|
0
|
841
|
|
POST
|
Using an update cursor in Python, it would look something like this: import arcgisscripting
gp = arcgisscripting.create(9.3)
inputFC = r"C:\temp\test.gdb\test"
fieldName1 = "THIS_FIELD"
fieldName2 = "THAT_FIELD"
concatFieldName = "CONCAT_FIELD"
updateRows = gp.updatecursor(inputFC)
updateRow = updateRows.next()
while updateRow:
if updateRow.getvalue(fieldName1) == None and updateRow.getvalue(fieldName2) != None:
updateRow.setvalue(concatFieldName, updateRow.getvalue(fieldName2))
elif updateRow.getvalue(fieldName1) != None and updateRow.getvalue(fieldName2) == None:
updateRow.setvalue(concatFieldName, updateRow.getvalue(fieldName1))
elif updateRow.getvalue(fieldName1) != None and updateRow.getvalue(fieldName2) != None:
updateRow.setvalue(concatFieldName, str(updateRow.getvalue(fieldName1)) + "-" + str(updateRow.getvalue(fieldName2)))
else:
print "FUBAR"
updateRows.UpdateRow(updateRow)
updateRow = updateRows.next()
del updateRow
del updateRows
... View more
07-27-2010
01:14 PM
|
0
|
0
|
1282
|
|
POST
|
Using an update cursor in Python, it would look something like this: import arcgisscripting gp = arcgisscripting.create(9.3) inputFC = r"C:\temp\test.gdb\test" fieldName1 = "THIS_FIELD" fieldName2 = "THAT_FIELD" concatFieldName = "CONCAT_FIELD" updateRows = gp.updatecursor(inputFC) updateRow = updateRows.next() while updateRow: if updateRow.getvalue(fieldName1) == None and updateRow.getvalue(fieldName2) != None: updateRow.setvalue(concatFieldName, updateRow.getvalue(fieldName2)) elif updateRow.getvalue(fieldName1) != None and updateRow.getvalue(fieldName2) == None: updateRow.setvalue(concatFieldName, updateRow.getvalue(fieldName1)) elif updateRow.getvalue(fieldName1) != None and updateRow.getvalue(fieldName2) != None: updateRow.setvalue(concatFieldName, str(updateRow.getvalue(fieldName1)) + "-" + str(updateRow.getvalue(fieldName2))) else: print "FUBAR" updateRows.UpdateRow(updateRow) updateRow = updateRows.next() del updateRow del updateRows
... View more
07-27-2010
01:13 PM
|
0
|
0
|
1282
|
|
POST
|
Python is kinda weird with division, and will return an integer anytime all the inputs are integer (example: 3/2 = 1). The trick is to just force one of the variables to be a decimal (aka float). (example: 3/float(2) = 1.5). Try this: gp.calculatefield_management ("highway", "minutes", "!length_mile!*float(60)/!minutes!","PYTHON")
... View more
07-26-2010
07:56 PM
|
0
|
0
|
1133
|
|
POST
|
Maybe a cursor would be faster - that is cursor through the .mdb file and build a shapefile that way? Seems like your .mdb file is on a network... Could it be that the network is slow? I would try to 1st copy the .mdb file locally, and then make the XYEventLayer.
... View more
07-23-2010
04:06 PM
|
0
|
0
|
1411
|
|
POST
|
To be ESRI-compliant, you should really use pgdbList = gp.listworkspaces("","ACCESS") and fgdbList = gp.listworkspaces("","FILEGDB") as part of the os.walk command, but how about this: import os
rootDir = r"D:\csny490"
gdbList = []
mdbList = []
for dirPath, dirNames, fileNames in os.walk(rootDir, topdown=True):
if dirPath.endswith(".gdb") or ".gdb." in dirPath:
gdbList.append(dirPath)
for file in fileNames:
if file.endswith(".mdb"):
mdbList.append(dirPath + "\\" + file)
... View more
07-23-2010
09:25 AM
|
0
|
0
|
2966
|
|
POST
|
This may get you part way there: http://arcscripts.esri.com/details.asp?dbid=16700
... View more
07-21-2010
02:30 PM
|
0
|
1
|
940
|
|
POST
|
Try naming your shapefile something else than a number (1.shp). Generally it is a bad idea to name a layer or field with a number as the 1st character.
... View more
07-21-2010
09:00 AM
|
0
|
0
|
472
|
|
POST
|
For the addition to work (or pretty much any other raster math), your rasters must have the same spatial extent. So basically (I assume these are the light poles) for each raster you need to create a new raster where the NoData within your study area is 0 (or some other non NoData value). Here's some Python code that might give you some ideas: # Name: make_fast_mosaic_v93.py
#
# Description
# -----------
# This script will mosaic a bunch of grids, but using a secret method that is
# mucho faster than the standard v9.3.1 SP1 mosaic tool.
#
# Written By: Chris Snyder, WA DNR, 03/01/2010, chris.snyder(at)wadnr.gov
#
# Written For: Python 2.5.1 and ArcGIS v9.3.1 SP1
#
# UPDATES:
#
# Notes on input parameters (for the toolbox):
# VARIABLE PAREMETER_INDEX PARAMETER_DATA_TYPE
# -------------------------------------------------------------------
# gridList 0 Grids
# outputGrid 1 Grid
# tempWorkspace 2 Workspace
# mosaicMethod 3 String (MAX, MIN, or MEAN)
# tempNoDataValue 4 Long Integer
try:
#Process: Import some modules
import os, string, sys, time, traceback, arcgisscripting
#Process: Create the gp object
gp = arcgisscripting.create(9.3)
#Process: Defines some functions used for getting messages from the gp and python
def showGpMessage():
gp.AddMessage(gp.GetMessages())
print >> open(logFile, 'a'), gp.GetMessages()
print gp.GetMessages()
def showGpWarning():
gp.AddWarning(gp.GetMessages())
print >> open(logFile, 'a'), gp.GetMessages()
print gp.GetMessages()
def showGpError():
gp.AddError(gp.GetMessages())
print >> open(logFile, 'a'), gp.GetMessages()
print gp.GetMessages()
def showPyLog(): #just print to the log file!
print >> open(logFile, 'a'), str(time.ctime()) + " - " + message
def showPyMessage():
gp.AddMessage(str(time.ctime()) + " - " + message)
print >> open(logFile, 'a'), str(time.ctime()) + " - " + message
print str(time.ctime()) + " - " + message
def showPyWarning():
gp.AddWarning(str(time.ctime()) + " - " + message)
print >> open(logFile, 'a'), str(time.ctime()) + " - " + message
print str(time.ctime()) + " - " + message
def showPyError():
gp.AddError(str(time.ctime()) + " - " + message)
print >> open(logFile, 'a'), str(time.ctime()) + " - " + message
print str(time.ctime()) + " - " + message
#Specifies the root directory variable, defines the logFile variable, and does some minor error checking...
dateTimeString = str(time.strftime('%Y%m%d%H%M%S'))
scriptName = os.path.split(sys.argv[0])[-1].split(".")[0]
userName = string.lower(os.environ.get("USERNAME")).replace(" ","_").replace(".","_")
tempPathDir = os.environ["TEMP"]
logFileDirectory = r"\\snarf\am\div_lm\ds\gis\tools\log_files"
if os.path.exists(logFileDirectory) == True:
logFile = os.path.join(logFileDirectory, scriptName + "_" + userName + "_" + dateTimeString + ".txt")
try:
print >> open(logFile, 'a'), "Write test successfull!"
except:
logFile = os.path.join(tempPathDir, scriptName + "_" + userName + "_" + dateTimeString + ".txt")
else:
logFile = os.path.join(tempPathDir, scriptName + "_" + userName + "_" + dateTimeString + ".txt")
if os.path.exists(logFile)== True:
os.remove(logFile)
message = "Created log file " + logFile; showPyMessage()
message = "Running " + sys.argv[0]; showPyMessage()
#Process: Attempts to check out a Spatial Analyst license
try:
gp.CheckOutExtension("Spatial")
except:
message = "ERROR: Spatial analyst license is unavailable... Exiting script!"; showPyError(); sys.exit()
#Process: Check out the highest license available
try:
if gp.CheckProduct("ArcView") == "Available":
gp.SetProduct("ArcView")
elif gp.CheckProduct("ArcEditor") == "Available":
gp.SetProduct("ArcEditor")
elif gp.CheckProduct("ArcInfo") == "Available":
gp.SetProduct("ArcInfo")
except:
message = "ERROR: Could not select an ArcGIS license level! Exiting script..."; showPyError(); sys.exit()
message = "Selected an " + gp.ProductInfo() + " license"; showPyMessage()
#Process: Sets some gp environment variables
gp.overwriteoutput = True
gp.pyramid = "NONE"
gp.rasterStatistics = "NONE"
#Process: Collect the input parameters
## gridList = r"D:\csny490\usgs_dem10m\dem11746;D:\csny490\usgs_dem10m\dem11747"
## outputGrid = r"D:\csny490\temp\temp\howaboutthis"
## processingWorkspace = r"D:\csny490\temp\temp"
## mosaicMethod = "MAX"
## tempNoDataValue = "-32000"
gridList = gp.GetParameterAsText(0)
outputGrid = gp.GetParameterAsText(1)
processingWorkspace = gp.GetParameterAsText(2)
mosaicMethod = gp.GetParameterAsText(3)
tempNoDataValue = gp.GetParameterAsText(4)
#Process: Print out the input parameters
message = "INPUT PARAMETERS"; showPyMessage()
message = "----------------"; showPyMessage()
message = "Input Grids = " + gridList; showPyMessage()
message = "Output Grid = " + outputGrid; showPyMessage()
message = "Processing Workspace = " + processingWorkspace; showPyMessage()
message = "Mosaic Method = " + mosaicMethod; showPyMessage()
message = "Temp NoData Value = " + tempNoDataValue + "\n"; showPyMessage()
#Process: Figure out the maximum extent of all the input grids
message = "Calculating maximum extent of input rasters..."; showPyMessage()
i = 0
gridsToProcessList = gridList.split(";")
for grid in gridsToProcessList:
i = i + 1
dsc = gp.describe(grid)
if i == 1:
xMin = dsc.extent.xmin
yMin = dsc.extent.ymin
xMax = dsc.extent.xmax
yMax = dsc.extent.ymax
else:
if dsc.extent.xmin < xMin:
xMin = dsc.extent.xmin
if dsc.extent.xmax > xMax:
xMax = dsc.extent.xmax
if dsc.extent.ymin < yMin:
yMin = dsc.extent.ymin
if dsc.extent.ymax > yMax:
yMax = dsc.extent.ymax
gp.extent = str(xMin) + " " + str(yMin) + " " + str(xMax) + " " + str(yMax)
message = "Maximum extent of input rasters is " + str(gp.extent) + "..."; showPyMessage()
#Process: Now build some new grids that have the max extent
maxString = ""
tempGridList = []
i = 0
tempGridDict = {}
for grid in gridsToProcessList:
i = i + 1
message = "Normalizing extent of " + grid + "..."; showPyMessage()
dsc = gp.describe(grid)
if dsc.format != "GRID": #if it aint a grid, make it one
tempConvertGrid = gp.createscratchname("","","RASTER",processingWorkspace)
gp.extent = ""
gp.CopyRaster_management(grid, tempConvertGrid, "", "", "", "", "", "")
tempGridList.append(tempConvertGrid)
somaExp = "con(isnull(" + tempConvertGrid + "), " + str(tempNoDataValue) + ", " + tempConvertGrid + ")"
else:
somaExp = "con(isnull(" + grid + "), " + str(tempNoDataValue) + ", " + grid + ")"
tempGrid = gp.createscratchname("","","RASTER", processingWorkspace)
tempGridList.append(tempGrid)
maxString = maxString + tempGrid + ","
gp.extent = str(xMin) + " " + str(yMin) + " " + str(xMax) + " " + str(yMax)
gp.SingleOutputMapAlgebra_sa(somaExp, tempGrid)
#Process: Max, then put back to null
message = "Mosaicing - This will take a while..."; showPyMessage()
tempGrid = gp.createscratchname("","","RASTER",processingWorkspace)
tempGridList.append(tempGrid)
if mosaicMethod == "MIN":
somaExp = "min(" + maxString + ")"
if mosaicMethod == "MAX":
somaExp = "max(" + maxString + ")"
if mosaicMethod == "MEAN":
somaExp = "mean(" + maxString + ")"
gp.SingleOutputMapAlgebra_sa(somaExp, tempGrid)
somaExp = somaExp = "con(" + tempGrid + " == " + str(tempNoDataValue) + ", setnull(1), " + tempGrid + ")"
if outputGrid.split(".")[-1] in (".bmp",".gif",".img",".jpg",".jp2",".png",".tif") or\
".gdb" in outputGrid or ".mdb" in outputGrid or ".sde" in outputGrid:
tempMosaicGrid = gp.createscratchname("","","RASTER", processingWorkspace)
tempGridList.append(tempMosaicGrid)
gp.SingleOutputMapAlgebra_sa(somaExp, tempMosaicGrid)
gp.CopyRaster_management(tempMosaicGrid, outputGrid, "", "", "", "", "", "")
else:
gp.SingleOutputMapAlgebra_sa(somaExp, outputGrid)
#Process: Delete all the temp grids
message = "Removing temporay processing grids..."; showPyMessage()
for tempGrid in tempGridList:
try:
gp.Delete_management(tempGrid, "")
except:
message = "WARNING: Failed to delete processing grid " + str(tempGrid) + "..."; showPyWarning()
message = "All done!"; showPyMessage()
except:
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()[2])[0]; showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()
... View more
07-20-2010
01:53 PM
|
0
|
0
|
848
|
|
POST
|
Yes, I meant that indeed imbeded cursors work, but there is a big difference between working and working fast. Dictionaries are basically a way to build light-speed database tables(s) in memory. Some practical examples using Python dictionaries: http://forums.esri.com/thread.asp?t=275202&f=1729&c=93#948148 (see the .zip file) http://arcscripts.esri.com/details.asp?dbid=16700
... View more
07-20-2010
08:02 AM
|
0
|
0
|
1421
|
|
POST
|
Here's two different methods to reorder fields via Python: 1. Add some dummy fields, calc over the values (FIELD1_DUMMY = FIELD1_ORIG), delete the original fields, add the fields you want in the order you want, calc over the values (FIELD1_ORIG = FIELD1_DUMMY), then delete the dummy fields. 2. Build a blank table, add the fields you want to retain in the order you want, then run the append tool to append the original records into the blank table with the reordered fields. As long as the field names/types are exactly the same, use the NO_TEST option, otherwise you have to use the ugly field mapping object which is a real pain.
... View more
07-19-2010
02:59 PM
|
0
|
0
|
1316
|
|
POST
|
Is your data in a geographic projection? If so, you may need to project it into something like stateplane or UTM...
... View more
07-16-2010
09:48 AM
|
0
|
0
|
636
|
|
POST
|
Take a look at the Near tool: http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?id=1352&pid=1347&topicname=Near_(Analysis) You must have an ArcInfo license to run it however...
... View more
07-16-2010
09:30 AM
|
0
|
0
|
636
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 08-29-2024 08:23 AM | |
| 1 | 08-29-2024 08:21 AM | |
| 1 | 02-13-2012 09:06 AM | |
| 2 | 10-05-2010 07:50 PM | |
| 1 | 02-08-2012 03:09 PM |
| Online Status |
Offline
|
| Date Last Visited |
08-30-2024
12:25 AM
|