Quantcast
Channel: Forums - Python
Viewing all articles
Browse latest Browse all 2485

arcpy.MakeXYEventLayer Help

$
0
0
Good Day. I have a csv file with weather stations and precipitation amounts by month. I want my code to ask which months the user would like to plot, open the csv file, add the precip data, and then plot the appropriate data on a map using ArcGIS 10.1 and python 2.7. The code I have so far is listed below.

Code:

# ------------------------------------------------------------------------------------
# GISClimateMapping.py
# Modified and Updated by Rex Morgan; Original Max Min Precip Snow .py by Josh Barnwell
# Description: Creates GIS maps for Temperatures, and Rain and Snow Amounts.
# ------------------------------------------------------------------------------------
# A Work in progress code 2-17-2013 1020 AM
# Removed print statements
# User Input of Month, Day, and what Variable to be plotted
# Not sure why the test9-1.py failed. I originally believed that to be due to the
#  non capitalization of the Lat and Long variable but that seems to not be the
#  case, as I have capitalized the variable.

import time
import csv
import array
from time import gmtime, strftime
print strftime("%Y-%m-%d %H:%M:%S", gmtime())


print ' '
print '                    ARCGIS Climate Data Mapping Program'
print ' '

fname = 'Z:\\Desktop\\COOP_rainfall2.csv'

# read the data file
data_list = []
for line in open(fname):
    # remove trailing newline char
    line = line.rstrip()
    # create a list
    line_list = line.split(',')
    data_list.append(line_list)

        # create a months dictionary with month:index pairs
mdict = {}
for ix, item in enumerate(data_list[0]):

    if ix > 8:
        mdict[item] = ix


#Gathering input from user
month1=raw_input('Input the 3 letter ID of beginning month  ')#getting input data from user
month2=raw_input('Input the 3 letter ID of ending month    ')#getting input data from user

#assigning beginning and ending month here
month_start = month1
month_end = month2

#Create a new list
new_list = []
outgroup = file("Z:\\Desktop\\test.csv", 'w') #this file is initially in the wrong format.
for item in data_list[1:]:

    station = item[0]
    lat = item[2] #Remembe to change this value if altering the structure of the input file Z:\\Desktop\\COOP_rainfall2.csv
    long = item[3]
    start = mdict[month_start]
    end = mdict[month_end]+1
    plist = [float(x) for x in item[start : end] if x] #having trouble with blanks
 
    if plist:
      mysum = sum(plist)
    new_list.append([station, lat, long, mysum])


for item in new_list:

    outgroup.write(str(item)) #this does produce a file with the info contained therein but not quite what I want
    #new_file.write("%s\n" % item)
f= open("Z:\\Desktop\\test2.csv", 'w') # This file needs to be different than the one in line 35 of code.

for row in new_list:
    f.write(','.join(map(str,row))+'\n')



new_list.insert(0,['Station', 'Lat', 'Long', 'mysum']) # this ran without errors and did add the values to the beginning of list
## this line added at 2-17-2013 933 AM

f= open("Z:\\Desktop\\test3.csv", 'w')
for row in new_list:
    f.write(','.join(map(str,row))+'\n')


print '    This is the end of the test6.py file.    Now for the rest of it. '

Rex = 'Z:\\Desktop\\test3.csv'

### Hack this part back in
Precip=[] #creating an array named Precip
inp = open (Rex,"r") # Rex defined in line 22 of code
for line in inp.readlines():
 line.split(',')
 Precip.append(line)
file.close(inp)
##### The part above hacked back in

print ' '
print 'This will take about 2 to 5 minutes...'

month = month1 + ' through ' + month2
months = month
usermonth = "[" + months + "]"

# Import arcpy module
import arcpy
import arcpy.mapping

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

import sys, string, os

# Directories
tempdir = 'CSV\\'
directory = 'N:\\climate\\ClimateSheets\\' + str(tempdir)
TopoToR = 'R:\\ArcGIS\\default.gdb\\TopoToR'


# Local variables:

GGW_Counties = "R:\\fxc\\Western Region FXC Packet\\GGW.shp"
Var_layer = months # variable assigned in line 40 of code
Var_shp = str(directory) + 'Var.shp'
Var_new = str(directory) + 'Varnew.shp'
Var_img = str(directory) + 'Var.img'
Var100_img = str(directory) + 'Var100.img'
Vari100 = str(directory) + 'Vari100'
Varcontour_shp = str(directory) + 'Varcontour.shp'
Output_stream_polyline_features = ""
Output_remaining_sink_point_features = ""
Output_diagnostic_file = ""
Output_parameter_file = ""
TopoToRasterExtent= "-108.891024 46.540403 -104.041596 49.000027"
spRef = r"Coordinate Systems\Geographic Coordinate Systems\World\WGS 1984.prj"
print 'Made it through Local variables'


import arcview
import sys, string, os, arcgisscripting
gp = arcgisscripting.create(10.1)
gp.SetProduct("ArcView") # or ArcEditor or ArcInfo
gp.overwriteoutput = 1
#arcpy.overwriteOutput = True
print 'Made it through import arcview'

### Getting error in the arcpy.MakeXYEventLayer_management ---- "Long" does not extist "Lat" does not exist
# Process: Make XY Event Layer
arcpy.MakeXYEventLayer_management(Rex, "Long", "Lat", Var_layer, spRef, "") #Rex is defined in line 90 of code as Z:\\Desktop\\test3.csv
print 'Make XY Event Layer Done'


# Process: Copy Features
arcpy.CopyFeatures_management(Var_layer, Var_shp, "", "0", "0", "0")
print 'Copy Features Done'


# Process: Topo to Raster
from arcpy import env
env.extent = "-108.891024 46.540403 -104.041596 49.000027"
from arcpy.sa import *
outTTR = TopoToRaster([TopoPointElevation([[Var_shp, Var_layer]])], "0.003", "", "20", "", "", "ENFORCE", "CONTOUR", "", "", "", "", "", "")
outTTR.save(TopoToR)
print 'Topo To Raster Done'


# Process: Clip
arcpy.Clip_management(TopoToR, "-108.891024 46.540403 -104.041596 49.000027", Var_img, GGW_Counties, "", "ClippingGeometry")
print 'Clip Done'


# Process: Define Projection for Shapefile in order to plot record values correctly
ggw_shp = 'R:\\fxc\\Western Region FXC Packet\\GGW.shp'
dsc = arcpy.Describe(ggw_shp)
coord_sys = dsc.SpatialReference
arcpy.DefineProjection_management(Var_shp, coord_sys)
print 'Define Projection Done'
print strftime("%Y-%m-%d %H:%M:%S", gmtime())

print 'Exporting Map'
from datetime import date
now = date.today().isoformat()
mxd1 = arcpy.mapping.MapDocument(r"R:\EventData\CoopPrecip1024.mxd")
mxd3 = arcpy.mapping.MapDocument(r"R:\EventData\CoopPrecip13.mxd")
                               
#newtitle = arcpy.mapping.ListLayoutElements(mxd3, "TEXT_ELEMENT", "title")[0]

if 'YTD' in months: #months defined in line 20
  print 'if statement'
  newtitle = arcpy.mapping.ListLayoutElements(mxd1, "TEXT_ELEMENT", "title")[0]
  for lyr in arcpy.mapping.ListLayers(mxd1):
  if lyr.name == "Var":
    if lyr.supports("LABELCLASSES"):
      lblClass = lyr.labelClasses[0] #this is the Default label class.
      lblClass.expression = usermonth
  newtitle.text = 'Annual COOP Precipitation Year to Date'
  arcpy.mapping.ExportToPNG(mxd1, r'R:\\Maps\\' + months + str(now) + '.png', resolution=100) #months defined in line 20
else:
  print 'else statement'
  newtitle = arcpy.mapping.ListLayoutElements(mxd3, "TEXT_ELEMENT", "title")[0]
  for lyr in arcpy.mapping.ListLayers(mxd3):
  if lyr.name == "Var":
    if lyr.supports("LABELCLASSES"):
      lblClass = lyr.labelClasses[0] #this is the Default label class.
      lblClass.expression = usermonth
  newtitle.text = 'Monthly COOP Precipitation for ' + month # month defined in line 40
  arcpy.mapping.ExportToPNG(mxd3, r'R:\\Maps\\' + months + str(now) + '.png', resolution=100) #months defined in line 20



print 'Map is Complete and located in R:\Maps'

print strftime("%Y-%m-%d %H:%M:%S", gmtime())

The problem I have is that I am getting an error in the MakeXYEventLayer. I will quote it below:

Quote:

Traceback (most recent call last):
File "\home\rex.morgan\Desktop\Temp\test9-3.py", line 151, in <module> arcpy.MakeXYEventLayer_management(Rex, "Long", "Lat", Var_layer, spRef, "")

File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\management.py" line 6322, in MakeXYEventLayer raise e

acrgisscripting.ExecuteError: Failed to execute. Parameters are not valid.
ERROR 000728: Field Long does not exist within table
ERROR 000728: Field Lat does not exist within table
Failed to execute (MakeXYEventlayer).
Any ideas would be greatly appreciated.

Viewing all articles
Browse latest Browse all 2485

Latest Images

Trending Articles



Latest Images