This week’s lab dealt with working with geometries in
Python, and it was a challenging one for me, partially because working with
arrays and nested loops are not my strong suit and partly due to a pretty
intense work schedule this week. In this lab, we were working with the “rivers.shp”
file, using loops to iterate through the cursor, and we wrote the data to a
.txt file.
After importing the modules and setting the workspace, I
created a search cursor for the shapefile I was working with. This called the
OID field, the SHAPE geometry object, and the NAME field. I created a .txt file
using the write mode, following examples in the text and in our exercise. To write
the data to a text file, I needed to create a couple of “for” loops. The first
iterates through each row in the shapefile’s attribute table. I created a
variable called vertexid within the loop set to 0, so that it resets for each
new feature. Within that loop, I created a second loop using the .getPart()
method, which iterates through each point in the array of the row. The .getPart()
method allows me to access the points in each array. If I did not use this
method, another “for” loop would be necessary. I added “1” to the vertexid
variable in this loop to keep track of the number of points in each feature.
Here’s where it got tricky for me. I needed to use the
write() method to write to the .txt file. I wanted to add the Feature/row ID,
the vertex ID, the X and Y coordinates, and the name of the river feature,
using “\n” to ensure each vertex is on its own line. I ran into a wall here
with syntax errors and exceptions at first. I was pretty sure the loops were
correct (at least mostly) because I immediately was able to print correct
values for the X and Y coordinates. I ran into a syntax error which gave no
input into where or what the error was, so I started deleting code (remembering
later I could have commented it out) and attempted to run the program. The issue
turned out to be a print statement I had created underneath the write()
statement, which wasn’t necessary, so I just left it out. The other error I had
was not using arrays properly. I had the output in the .txt file correct, but
the name and feature were printing “NAME” and “FEATURE”. Once I changed this to
row[2] in the write() statement, the program wrote to the .txt file correctly. The
output is shown below. The first column
shows the Feature/row ID, the second column shows the vertex ID for that
feature (notice how it resets for each feature), the 3rd and 4th
columns are the X and Y coordinates of the vertex, and the 5th and 6th
columns are the feature name and type.
This was a really good lab, as I learned about working with
geometries and got more experience working with arrays. Both the instructor and the other students on the discussion boards were a big help with steering me in the right direction with my code. I wish I had had more
time to really work with it, as opposed to an hour or two at a time, but even
so, I learned a lot and I think it’s less confusing and less intimidating to work with than with FORTRAN or even IDL code.
No comments:
Post a Comment