I have track (line) and milemarkers (point). Each point is offset by a different distance. Is there a way to find where each point would intersect the line if going perpendicularly out from the line?

As an analogy, imagine riding a train, sitting perpendicular to the direction of travel, looking out the window. Each time you see a milepost directly in front of you, you make note of your position on the track.

  • 1
    Are you looking for the algorithm to do this yourself, or are you wanting a push-button solution?
    – nagytech
    Jul 19, 2012 at 23:54

3 Answers 3


Take a look at the Snap Tool in the edit toolbox. It looks like it does exactly what you are looking for.

Snap Before and After

Note that it requires at least an ArcEditor license. For details on the tool see ESRI's help page on this tool. Snap Tool Help


Have a look at Near (Analysis) (I linked to the 10.0 documentation, since you didn't specify your version).

If you choose the location option, the tool will edit the intersect positions into the milemarkers' table, into two new fields NEAR_X and NEAR_Y. If you want to create a new feature class using these coordinates, I don't know if there's a tool for that, but if you can handle python, you can definitely do it there. Again, I don't know which version you have, but for 10.0 (with arcpy) this should work:

import arcpy

# first parameter; the geodatabase where to store the new feature class
db = arcpy.GetParameterAsText(0)
# second parameter; the feature class with the mile markers
milemarkers_layername = arcpy.GetParameterAsText(1)
# third parameter; the name of the feature class to create
intersects_layername = arcpy.GetParametersAsText(2)

# create the new feature class
arcpy.CreateFeatureClass_management(db, intersects_layername, 'POINT')

# create the cursors
mCur = arcpy.SearchCursor(milemarkers_layername)
iCur = arcpy.InsertCursor(db + '/' + intersects_layername)

for mRow in mCur:
  iRow = iCur.newRow()
  # read the values given by the Near tool
  near_x = mRow.getValue('NEAR_X')
  near_y = mRow.getValue('NEAR_Y')
  # create a new point with those values, then add it to the new table
  iPoint = arcpy.Point(near_x, near_y)
  iRow.shape = iPoint

# free up both layers
del mRow, mCur, iRow, iCur

I'm not at work right now, so I can't test that (the catch-22 being that when I am at work, I have to be doing other things than hanging around SO), but I did my best to check it for errors. Hopefully someone can verify it for me.

Near (Analysis) requires an ArcInfo license.

Edit: by the way, don't set the search radius too high, or the search might take ages (depending on the amount of data you have).

  • 1
    If you want to go this route, the tool to create a point feature class from the coordinates is the Make XY Event Layer. You'll want to export the nearX and nearY fields from the original feature into a table first.
    – amasephy
    Jul 20, 2012 at 22:52

How about an out-of-the-box tool "Split Line at Point"? You can find it in Data Management Toolbox, Features Toolset. From the online help - Splits line features based on intersection or proximity to point features. Accepts a search radius. License level - ArcInfo or Advanced.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.