I am trying to do a select by location, I am trying to do a selection by location on just the parcel that the newly create point is created on, then do a spatial join to then do a search cursor on that one parcel record to grab and populate the attributes i need.
The tool's code is suppose to create a point, populate the x,y & AddressID fields and populate the "add_fields" from the Parcels.
Here my tool's code i have, but it does nothing so i am guess my select by location is not correct. I would supper appreciate help with this code.
The tool's code is suppose to create a point, populate the x,y & AddressID fields and populate the "add_fields" from the Parcels.
Here my tool's code i have, but it does nothing so i am guess my select by location is not correct. I would supper appreciate help with this code.
Code:
import arcpy
import pythonaddins
import os
import time
from arcpy import env
class Timer:
def __enter__(self):
self.start = time.clock()
return self
def __exit__(self, *args):
self.end = time.clock()
self.interval = self.end - self.start
class Add_points(object):
"""Implementation for AddPoints_addin.Add_points (Tool)"""
def __init__(self):
self.enabled = True
self.cursor = 3 # Can set to "Line", "Circle" or "Rectangle" for interactive shape drawing and to activate the onLine/Polygon/Circle event sinks.
def onMouseDownMap(self, x, y, button, shift):
###### Creats point and populates fields x,y & AddressID
fcTarget = "TonyTwoWay.DBO.TT"
workspace = r"C:\Users\talmeida\AppData\Roaming\ESRI\Desktop10.1\ArcCatalog\Connection to dsd15_sqlexpress.sde"
arcpy.env.overwriteOutput = True
#arcpy.ChangeVersion_management('TonyTwoWay.DBO.TT','TRANSACTIONAL','dbo.DEFAULT', "")
# Start an edit session. Must provide the worksapce.
edit = arcpy.da.Editor(workspace)
# Edit session is started without an undo/redo stack for versioned data
# (for second argument, use False for unversioned data)
edit.startEditing(True)
# Start an edit operation
edit.startOperation()
CC_list = []
with arcpy.da.SearchCursor(fcTarget, ["AddressID"]) as cursor:
for row in cursor:
try:
if "CC" in row[0]:
CC_list.append(int(row[0].strip("CC")))
except TypeError:
pass
del cursor
t = Timer()
with t:
CC_list.sort()
AddressID = CC_list[-1] + 1
AddressID = 'CC' + str(AddressID)
row_values = [(x, y, (x, y), AddressID)]
cursor = arcpy.da.InsertCursor(fcTarget, ["X_Coord", "Y_Coord", "SHAPE@XY", "ADDRESSID"])
for row in row_values:
cursor.insertRow(row)
del cursor
# Stop the edit operation.
edit.stopOperation()
# Stop the edit session and save the changes
edit.stopEditing(True)
timetest = "completed in %.02f secs." % (t.interval)
print timetest
#####################################################
Parcel = "testParcelsAdmit"
add_fields = ["ACCOUNT","SiteNum","OwnerName","SiteAddres","SiteNumSfx","SiteStreet","predir","StreetType","SubName"]
Parcel_lyr = arcpy.MakeFeatureLayer_management(Parcel, "Parcel lyr")
entries = int(arcpy.GetCount_management(fcTarget).getOutput(0))
for i in xrange(entries):
pt_lyr = arcpy.MakeFeatureLayer_management(fcTarget, "points_layer", "\"OBJECTID\"={}".format(str(i)))
arcpy.SelectLayerByLocation_management(Parcel_lyr, "INTERSECT", pt_lyr, "", "NEW_SELECTION")
# fix args
if not isinstance(add_fields, list):
# from script tool
add_fields = add_fields.split(';')
# do not need this scratch file
fcOutput = r'in_memory\temp_join'
arcpy.SpatialJoin_analysis(Parcel_lyr, fcTarget,fcOutput, 'JOIN_ONE_TO_MANY')
# grab oid field from points
oid_t = arcpy.Describe(fcTarget).OIDFieldName
# Add JOIN_FID to first item in field list
add_fields.insert(0, 'JOIN_FID')
# Create dictionary
with arcpy.da.SearchCursor(fcOutput, add_fields) as rows:
join_dict = {r[0]:[r[i] for i in range(1,len(add_fields))] for r in rows}
# Now update the new target
curW = arcpy.UpdateCursor(fcTarget)
for row in curW:
t_oid = row.getValue(oid_t)
if t_oid in join_dict:
for f in add_fields:
row.setValue(f, join_dict[t_oid][add_fields.index(f)])
curW.updateRow(row)
del row, curW
arcpy.AddMessage('Updated all records sucussefully')
pass