POST
|
Unfortunately it just outputs what I coded as the input.
... View more
06-15-2015
10:37 AM
|
0
|
0
|
668
|
POST
|
I tried my script again today, and it doesn't want to work. I think the problem is that layers are defaulted to using VBscript for the expression, but mine is Advanced Python. If I run the script on a layer that has the default VBscript, it won't label properly. If the layer is only set to Python, it doesn't label properly. When I have the expression type set to Python and the advanced box checked, then it works. Are there additional parameters to set the label expression type to Python and Advanced?
... View more
06-15-2015
09:21 AM
|
0
|
3
|
668
|
POST
|
Thanks Sephe. I included them because when I look at the expression copied to the label's expression box, it's a single line of text. I don't know how it gets interpreted to I included them.
... View more
06-15-2015
09:16 AM
|
0
|
1
|
668
|
POST
|
It appears I was having a refresh problem or something, because now it seems to work. Strange.
... View more
06-11-2015
09:36 AM
|
0
|
8
|
668
|
POST
|
I'm working with many shapefiles that all need to be symbolized and labeled the same way. I've gotten symbol layer matching to work, but I've having difficulty with the labels, particularly with the expression working. My expressions works fine loading the text file from the layer properties window, but not through the Python console. My expression uses the Advanced Python dialogue box. Here is my code so far. It's copied and pasted from the expression window and wrapped in triple quotes, but it does not end up labeling. Is there a particular way to enter the expression? mxd = arcpy.mapping.MapDocument("Current")# Define mxd to current file. inputData0 = "AM_Bourbonnais_Pkwy_WB_LINE_Spring_2015" mapLyr0 = arcpy.mapping.ListLayers(mxd, inputData0) [0] lFunc = """def FindLabel ( [Speed] ):\n label = str(round(float([Speed]),0))\n if label[1] == '.':\n label = label[:1]\n label = label + " MPH"\n return label\n else:\n label = label[:2]\n label = label + " MPH"\n return label""" mapLyr0.labelClasses[0].expression = lFunc
... View more
06-11-2015
09:20 AM
|
0
|
9
|
3803
|
POST
|
I do use PyScripter for running processes but I haven't figured out how to turn off the auto-complete, particlularly for quotes and the like, which drives me crazy trying to type code. That's why I usually write in Notepad++.
... View more
01-30-2015
02:00 PM
|
0
|
0
|
3239
|
POST
|
Sorry about that. It's an issue with the code formatting of the forum, I think, because I pasted it directly from Notepad++ which has all the correct indentation. I don't know what the error pertains to with the code you provided, just that there was a syntax error with this line: features.append(arcpy.Polyline(arcpy.Array( [arcpy.Point(lastLong, lastLat), arcpy.Point(thisLong, thisLat)])), sr)
... View more
01-30-2015
01:39 PM
|
0
|
2
|
3239
|
POST
|
Thanks for the posts, you guys were right about the spatial reference problem. All I did was add that bit to the array function in my original script and it works great! Thanks for the help! mxd = arcpy.mapping.MapDocument("Current")# Define mxd to current file.
mapLyr1 = arcpy.mapping.ListLayers(mxd, "test_points") [0]
feature_info = list()
with arcpy.da.UpdateCursor(mapLyr1,["FID","Latitude", "Longitude", "E_Lat", "E_Long"]) as sCursor:
for row in sCursor:
if row[0] == 0:
lastLat = row[1]
lastLong = row[2]
else:
thisLat = row[1]
thisLong = row[2]
row[3] = lastLat
row[4] = lastLong
sCursor.updateRow(row)
Coords = [[thisLong, thisLat], [lastLong, lastLat]]#creates the X1, Y1 and X2, Y2 pairs
print Coords
feature_info.append(Coords)#append the X,Y pairs
lastLat = thisLat#turn current Y value into past Y value
lastLong = thisLong#turn current X value into past X value
#Loops through layer to create list of X,Y Pairs
with arcpy.da.SearchCursor(mapLyr1, ["Longitude", "Latitude", "E_Long", "E_Lat"]) as lineMaker:
for points in lineMaker:
p1, p2, p3, p4 = points[0], points[1], points[2], points[3]
pairs = [[p1, p2], [p3, p4]]
feature_info.append(pairs)
features = []
#Snippet from Help/ESRI Resources
for feature in feature_info:
# Create a Polyline object based on the array of points
# Append to the list of Polyline objects
features.append(
arcpy.Polyline(
arcpy.Array([arcpy.Point(*coords) for coords in feature]),arcpy.SpatialReference(4326)))
# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, "c:/temp/polylines.shp")
... View more
01-30-2015
12:39 PM
|
0
|
4
|
3239
|
POST
|
I had to add a couple brackets and parentheses to the Array/Point line to get it to run, but I receive this error: Runtime error Traceback (most recent call last): File "<string>", line 55, in <module> File "c:\program files (x86)\arcgis\desktop10.2\arcpy\arcpy\management.py", line 2429, in CopyFeatures raise e RuntimeError: Object: Error in executing tool Here's the updated script import arcpy
# location of input and output
fc_in = r"C:\temp\test_points.shp" # or .dbf, or ?
fc_out = r"C:\temp\polylines.shp"
FID = "FID"
fld_lat_in = "Latitude"
fld_lon_in = "Longitude"
fld_lat_out = "E_Lat"
fld_lon_out = "E_Long"
flds = (FID, fld_lat_in, fld_lon_in, fld_lat_out, fld_lon_out)
sr = arcpy.Describe(fc_in).spatialReference # if input is a featureclass, or:
# sr = arcpy.SpatialReference(4326) # where 4326 represents the WKID of the coordinate system
features = []
cnt = 0
with arcpy.da.UpdateCursor(fc_in, flds) as curs:
for row in curs:
cnt += 1
if cnt == 1:
lastLat = row[1]
lastLong = row[2]
else:
thisLat = row[1]
thisLong = row[2]
row[3] = lastLat
row[4] = lastLong
curs.updateRow(row)
features.append([arcpy.Polyline(arcpy.Array([arcpy.Point(lastLong, lastLat), arcpy.Point(thisLong, thisLat)])), sr]) # provide sr
lastLat = thisLat # turn current Y value into past Y value
lastLong = thisLong # turn current X value into past X value
del curs, row
# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, fc_out)
... View more
01-30-2015
12:03 PM
|
0
|
1
|
3239
|
POST
|
Is it trying to run a file off a local drive? In this case you would need to place the file in the right local folder on the colleague's computer or update the file location in the tool. Otherwise, are you certain you set up the script properly and the second computer? The script file needs to be in the proper location and the tool needs to be referencing the proper script file location. Hope this helps.
... View more
01-30-2015
09:25 AM
|
1
|
0
|
498
|
POST
|
I'm in the same boat as you with being a novice with Python scripting. My lastest phase of attribute manipulation has been with using dictionaries to use a one (key) to multiple (value list) data entry. I dont' know how you have your data structured, but using dictionary indices can access the particular values you want. You could probably create a row dictionary and update a dictionary of the dataset to reference for assigning the owners where you want the information to go. rowDict = {rowID : [Owner1, Owner2, Owner3]} fullDict.update(rowDict) Then you can pull your owners out again fullDict.keys().index(rowID)#this returns the index location of the key fullDict.values()[fullDict.keys().index(rowID)]#this returns the owners for the row You can pull each owner from the returned list about and an additional index fullDict.values()[fullDict.keys().index(rowID)][1] Here's an example rowID = 76
Owner1 = "John"
Owner2 = "Sally"
Owner3 = "George"
rowDict = {rowID : [Owner1, Owner2, Owner3]}
fullDict = dict()
fullDict.update(rowDict)#updates the row of information to the full dictionary
fullDict.keys().index(rowID)#returns the owners' names
fullDict.keys().index(rowID)[1]#returns the owner's name of the second owner in the list the second owner in the list If the owners names are in separate objects, it's possible to update the dictionary to add the other owners names. The only way to do that is with dict.update() and the new dictionary values has to have the same key as what it's overwriting and the values then need to be a list of the owners from all the objects. a.update({a.keys()[indexForRow_ID_For_A]:[a.values()[indexForRow_ID_For_A], b.values()[indexForRow_ID_For_B], c.values()[indexForRow_ID_For_C]]}) This would take the key value from A and update the values with the values from A, B, and C. Like I said, my knowledge of Python is still in the novice section. If I understand what your trying to do, then perhaps dictionaries can help. I hope this helps in some way.
... View more
01-30-2015
09:21 AM
|
1
|
18
|
1636
|
POST
|
I'm working on manipulating point coordinates into line segments. I have a series of GPS track points that I'm trying to get into individual links. Each line will only have a starting vertex and and ending vertex. I was successful in loading each point, starting with the second point, in copying the X,Y coordinates from the prior point. For example, point 2 has its GPS location in and X and Y column and it has the coordinate from point 1 in two other X and Y columns, point 3 has its X,Y values and the values from point 2. This has given me both the starting and ending coordinates. I tried using the sample Python script from the help file, but it seems to skip segments. The only thing I can think is happening is that the X1 and Y1 and loading in as the same as X2 and Y2, so there is no line to be drawn, yet a feature is created. The other problem I've run into is that the vertices of the lines don't overlap the points. mxd = arcpy.mapping.MapDocument("Current")# Define mxd to current file.
mapLyr1 = arcpy.mapping.ListLayers(mxd, "test_points") [0]
feature_info = list()
with arcpy.da.UpdateCursor(mapLyr1,["FID","Latitude", "Longitude", "E_Lat", "E_Long"]) as sCursor:
for row in sCursor:
if row[0] == 0:
lastLat = row[1]
lastLong = row[2]
else:
thisLat = row[1]
thisLong = row[2]
row[3] = lastLat
row[4] = lastLong
sCursor.updateRow(row)
Coords = [[thisLong, thisLat], [lastLong, lastLat]]#creates the X1, Y1 and X2, Y2 pairs
print Coords
feature_info.append(Coords)#append the X,Y pairs
lastLat = thisLat#turn current Y value into past Y value
lastLong = thisLong#turn current X value into past X value
#Loops through layer to create list of X,Y Pairs
with arcpy.da.SearchCursor(mapLyr1, ["Longitude", "Latitude", "E_Long", "E_Lat"]) as lineMaker:
for points in lineMaker:
p1, p2, p3, p4 = points[0], points[1], points[2], points[3]
pairs = [[p1, p2], [p3, p4]]
feature_info.append(pairs)
features = []
#Snippet from Help/ESRI Resources
for feature in feature_info:
# Create a Polyline object based on the array of points
# Append to the list of Polyline objects
features.append(
arcpy.Polyline(
arcpy.Array([arcpy.Point(*coords) for coords in feature])))
# Persist a copy of the Polyline objects using CopyFeatures
arcpy.CopyFeatures_management(features, "c:/temp/polylines.shp") I end up with the features looking like this: I'm not sure if this is a scripting error alone, or if projections are playing a part too. If it were a projection issue, then all the lines would show up. I expect that if it were only a scripting error, all the points and lines would coincide.
... View more
01-30-2015
06:48 AM
|
0
|
9
|
13511
|
POST
|
Thanks for the reply. I forgot about root being a callable variable, too. I ended up copying all the mxds to the main folder and it ran fine, then I had to move all the files back. If I run into this issue again it helps to know. I use a lot of template mxds that can quickly spread to many files that need a change.
... View more
01-08-2015
08:56 AM
|
0
|
0
|
809
|
POST
|
I have a total of 27 mxd files that I need replace the source path for a layer. I'm trying to use os.walk to go through and update each mxd because they are in subfolders of the main folder. It seems I have a directory variable problem. I've set the workspace to the folder with the files, but when I try to use os.path.abspath() Python is prefixing my filename with the directory going to ...Users\..\Documents\. Is there another parameter to change? I'm receiving an assertion error on an invalid MXD filename, and I think this is the reason why. For now I have the actual functions coded out until I can get the script to run through the files properly. import arcpy, os, glob
arcpy.env.workspace = r'Z:\GIS\Projects\Travel_Time_Survey'
mainDir = r'Z:\GIS\Projects\Travel_Time_Survey'
for root, dirs, files in os.walk(mainDir):
for filename in files:
print filename
if filename[-4:] == ".mxd":
print filename
filePath = os.path.abspath(filename)
mxd = arcpy.mapping.MapDocument(filePath)
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr == "Roads":
print lyr
# Lyr.replaceDataSource(r"Z:\GIS\Projects\LRTP", "SHAPEFILE_WORKSPACE", "Streets_LRTP.shp",TRUE)
# mxd.save()
# arcpy.mapping.ExportToPDF(mxd, r"Z:\GIS\Projects\Travel_Time_Survey\{0}.pdf".format(filename[:-4]))
else:
pass
else:
pass
else:
pass
... View more
01-08-2015
07:08 AM
|
0
|
3
|
5083
|
POST
|
Thank you all for the replies. I will keep this in mind. Triple quotes was my immediate solution when I realized I had both single and double quotes for the query. My temporary solution for this was to create a string variable that was the entire wildcard part '% Township' and that worked, but I don't want to keep creating variables just for the purpose of a workaround.
... View more
10-02-2014
10:23 AM
|
0
|
0
|
1316
|
Title | Kudos | Posted |
---|---|---|
1 | 09-24-2014 08:42 AM | |
1 | 01-30-2015 09:21 AM | |
1 | 01-30-2015 09:25 AM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|