Create point with mouse click

3499
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)

Reply
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)

Reply
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']

Reply
0 Kudos
PacoAlverez
New Contributor III

i am do that here am i not?

row_value = (x,y)

Reply
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.

Reply
0 Kudos