Create point with mouse click

5774
15
Jump to solution
07-23-2015 03:06 PM
PacoAlverez
New Contributor III

I am attempting to learn python so please bare with me. I would like to create points with a mouse click. I have the following code from another post but it's not working i am getting the following error. at this point i would like to just create one point but after i get past this code i would like to be able to click anywhere and create multiple points. Can some one help me out with this code?

Traceback (most recent call last):

  File "C:\GIS\AddPoint.py", line 17, in <module>

    cursor.insertRow(row)

TypeError: sequence size must match size of the row

Failed to execute (Script).

#import modules  
import arcpy  

point = arcpy.GetParameterAsText(0)  #click
An = "AnimalPoints" #target point feature class Animal Sightings
  
for prow in arcpy.da.SearchCursor(point,'SHAPE@XY'):        
    x,y = prow[0]      
del prow  
   
point1 = arcpy.Point(x, y)  
ptGeometry = arcpy.PointGeometry(point1)

with arcpy.da.InsertCursor(An,('SHAPE@XY')) as cursor:
    cursor.insertRow(row)
0 Kudos
15 Replies
WesMiller
Regular Contributor III

Freddie Gibson​makes a good point you may want to start your code with something like below just to make sure your in the same spatial reference.

mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
dfsr = df.spatialReference
fcsr = arcpy.Describe(An).spatialReference
if dfsr.name == fcsr.name:
    """Now do your work"""
PacoAlverez
New Contributor III

Wes thank you i will incorporate that into the code. Also how would i create multiple points and actually have them created to the feature class?

I would like to populate the POINT_X AND POINT_Y when the point is created.

i have add to my code to try to get the x,y populated but i get an error, i am thinking it's a syntax error.

File "C:\GIS\Python\AddPoint\AddPoint.py", line 24, in <module>

    cursor.insertRow(row_value)

TypeError: sequence size must match size of the row

#import modules  
import arcpy  

arcpy.env.qualifiedFieldNames = False
An = "AnimalPoints" #target point feature class Animal Sightings

mxd = arcpy.mapping.MapDocument("CURRENT")  
df = arcpy.mapping.ListDataFrames(mxd)[0]  
dfsr = df.spatialReference  
fcsr = arcpy.Describe(An).spatialReference  
if dfsr.name == fcsr.name:  
    """Now do your work"""  

point = arcpy.GetParameterAsText(0)  #click

for prow in arcpy.da.SearchCursor(point,'SHAPE@XY'):        
    x,y = prow[0]      
del prow  

row_value = ([(x,y)])

with arcpy.da.InsertCursor(An,('POINT_X', 'POINT_Y','SHAPE@XY')) as cursor:
    cursor.insertRow(row_value)
0 Kudos
WesMiller
Regular Contributor III

You need to make row_value = something before you can create the row. Insert Row will accept either a list or tuple. You'll need to set row_value in the order of your field list ['POINT_X', 'POINT_Y','SHAPE@XY']

0 Kudos
PacoAlverez
New Contributor III

i am do that here am i not?

row_value = (x,y)

0 Kudos
WesMiller
Regular Contributor III

That is the tuple for Shape@XY

it should be

row_value = [x,y,(x,y)] or something similar

PacoAlverez
New Contributor III

Got it, thank you.

0 Kudos