# Reads rhino positions from an Excel-originating CSV file # and writes them to a pre-existing shapefile import arcpy from arcpy import env" import fileinput import string import os env.overwriteOutput = True # Hard code file paths spreadsheet = "C:/WCGIS/Geog485/Lesson4/RhinoObservations.csv" # Sample of data ###Observer,X,Y,Rhino,Comments ##Ben,26.99391,-19.10447,Bo, ##Ben,27.00071,-19.1089,Tulip,Bathing ##Ben,26.9919,-19.10511,Bo, ##Ben,27.00071,-19.1059,Tulip, ##Ben,26.96809,-19.09578,Patches, ##Ben,26.97808,-19.11016,Dinky, ##Ben,26.99213,-19.10395,Bo, ##Ben,27.00083,-19.10326,Tulip, ##Ben,26.97038,-19.09863,Patches,Not doing much of anything ##Ben,26.97768,-19.11153,Dinky, ##Ben,26.99107,-19.10421,Bo, ##Ben,27.00138,-19.1021,Tulip, ##Ben,26.97122,-19.0991,Patches, ##Ben,26.97551,-19.11269,Dinky, ##Ben,26.9904,-19.10553,Bo, ##Ben,26.99893,-19.10342,Tulip, # output feature class?? feature class doesn't exist yet, so not sure how to do this?? fcname = "C:/WCGIS/Geog485/Lesson4" outname = "C:/WCGIS/Geog485/Lesson4/Rhino.shp" # Open the CSV file & read the header line observations = open(spreadsheet, "r") headerline = observations.readline() fieldList = headerline.split(",") ### 0 1 2 3 4 ### Observer,X,Y,Rhino,Comments # Look through the header to find "X", "Y" and the "Rhino" field indices rhinoIndex = fieldList.index("Rhino") xIndex = fieldList.index("X") yIndex = fieldList.index("Y") ## print "Rhino "+str(rhinoIndex) +" X "+str(xIndex)+" Y "+str(yIndex) # Create a list / array for RhinoTracks rhinoTracks = {} # create the output feature class arcpy.CreateFeatureclass_management ("C:/WCGIS/Geog485/Lesson4", "Rhino.shp", "POLYLINE") # open an insert cursor for the new feature class cur = arcpy.InsertCursor(outname) # Loop through the rest of the file to read in all of the rhinos for line in observations.readlines(): ##Ben,26.99391,-19.10447,Bo, segmentedLine = line.split(",") rhino = segmentedLine[rhinoIndex] #print rhino # If rhino exists in dictionary - get the array from its key & add a point if rhino in rhinoTracks: coordArray = rhinoTracks[rhino] # create a new row or feature, in the feature class ## coordArray { [x,y] } lineArray = arcpy.Array() coord = arcpy.Point coord.X = segmentedLine[xIndex] coord.Y = segmentedLine[yIndex] ## add point to coordinate array coordArray.add(coord) #print "Rhino is "+rhino+" added point "+str(segmentedLine[xIndex])+" "+str(segmentedLine[yIndex]) ## coordArray { [x,y],[x1,y1] } feat = cur.newRow() # set the geometry of the new feature to the array of points feat.shape = lineArray #insert the feature cur.insertRow(feat) lineArray.removeAll() lineArray.add(coord) # If rhino doesn't exist in dictionary - make a new array & add a point else: cur = arcpy.InsertCursor(outname) ## Create a coordinate array coordArray = arcpy.Array ## Create a point object coord = arcpy.Point coord.X = segmentedLine[xIndex] coord.Y = segmentedLine[yIndex] ## add point to coordinate array coordArray.add(coord) feat = cur.newRow() # set the geometry of the new feature to the array of points feat.shape = lineArray #insert the feature cur.insertRow(feat) lineArray.removeAll() lineArray.add(coord) ## add coordinate array to my Dictionary (list of rhinos) rhinoTracks[rhino] = coordArray
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.