Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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.

share|improve this question
Are you looking for the algorithm to do this yourself, or are you wanting a push-button solution? – nagytech Jul 19 '12 at 23:54

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

share|improve this answer

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

share|improve this answer
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 '12 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.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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