I am working in ArcMap 10.5.1 and have a polyline feature class (streams) and a point feature class of fish sightings plotted along the streams. I am trying to add a degree of observational uncertainty to these fish sighting locations by converting them to polylines based on potential error in location along the streams.

How may I do this?

The distance must be measured along the stream line and not the straight line distance from the source points.

  • RivEX could create the reach lines you want for each point. Each point would have a distance field which you would have calculated based upon your uncertainty, have a look at it's help file it has a mini video showing you how reaches are created.
    – Hornbydd
    Commented Aug 17, 2018 at 16:50

2 Answers 2


Use the Create Route tool on your streams to create a linear referencing route feature class. Then use the Locate Features Along Route tool to get the route and measure of each point position along the stream in an event table. Then add two fields to the event table representing the high and low values for the uncertainty and add and subtract the distance from the point measure value into those fields. Use the Make Route Event Layer tool with the route ID and the two fields with adjusted measures for the uncertainty in your event table to create a line event feature class and that will be exactly what you want.


As Richard pointed it is a linear referencing task. My solution using arcpy geometry methods. It assumes that you have layer called "STREAMS" stored in shapefile.

Snap your fish points to streams and follow that workflow:

arcpy.Near_analysis("fish", "STREAMS")
arcpy.Buffer_analysis("fish", "../buffers.shp", "1 Meters")
arcpy.Intersect_analysis("buffers #;STREAMS #", "../segments.shp")

Use below field calculator expression on "Shape" field of small segments:

def getSegment(shp,nearFID, interval):
 q='"FID"=%s' %nearFID
 with arcpy.da.SearchCursor("STREAMS", 'Shape@',q) as cursor:
  for row in cursor:  stream=row[0]
 segment=stream.segmentAlongLine (chainage-interval,chainage+interval)
 return segment
getSegment( !Shape!,!NEAR_FID!,30)


enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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