CEE 8813 · GIS Lectures 3–4 · Linear referencing

Linear Referencing Lab

Transportation agencies locate things on roads by route and milepoint. Every crash in the lecture's crash table already carries a GDOT route ID and a milepoint. Pick a real District 7 route, watch its curves and crashes become events along its measure, and compare the milepoint answer to “which crashes happened on a curve?” with the 150 ft buffer from Lecture 4.

Map

Selected route Other side (I/D) Curve and its buffer Crash: event by milepoint · reported lat/lon Other crashes

Drag to pan, scroll or pinch to zoom. Hover near the route to read its milepoint. Click a crash to select it. Crash colours follow the comparison in step 3.

Straight-line diagram

The road is straightened out and drawn against its measure, the way DOT engineers draw a straight-line diagram. Each row is an event table on the same route: line events (AADT, lanes, speed limit, functional class, curves) have a from- and a to-milepoint, crashes are point events with one milepoint. Hollow diamonds are crashes coded on other routes that the buffer catches, placed where their coordinates project onto this route. Blank stretches are gaps in the route's measures. A gap usually has one of two causes. The road leaves the county for a while: I-85 dips into Clayton near the airport, and its Fulton measure jumps by the 1.36 miles it spends there. Or the road shares pavement with another state route and those segments carry the other route's ID: on the Downtown Connector the segments are coded as I-75, so SR 403 in Fulton has none from MP 18.9 to 27.3. Drag sideways to pan; hover to move the marker on the map.

What you are seeing

1 · Locate Features Along Routes: curves become line events

The curve inventory is a set of lines with no milepoints. To put a curve on the diagram, project its first and last vertex onto the measured route, take the closest point on the route and read the measure there. Each curve gets a from-milepoint and a to-milepoint, the same RID, FMEAS and TMEAS fields that ArcGIS Pro's Locate Features Along Routes writes. The snap distance is how far the curve line sits from the route line.

CurveRadius (ft)Length (ft)From MPTo MPBy measure (ft)Snap (ft)Crashes by MP

2 · Make Route Event Layer: crashes become point events

A crash row with an Inventory Route ID and a MilePoint is a point event. Make Route Event Layer finds the route with that ID and walks along it to the milepoint, interpolating between the measures stored at the vertices. Nothing about the crash's latitude and longitude is used. Comparing the event location with the reported coordinates is a quick data-quality check.

CrashMPRoad at cross streetSeverityEvent to reported (ft)CheckStep 3

The whole crash table on this road network

Can be located–route ID is a D7 state route
Cannot be located–route ID not on this network
No route ID–blank in the crash table

Next to this route, cannot be located on this network

3 · Overlay Route Events: curve crashes by milepoint, compared with the buffer

By milepoint, a crash is a curve crash when it carries this route ID and its milepoint falls inside a curve's from–to range, give or take a tolerance. In ArcGIS Pro that is Overlay Route Events with the INTERSECT type, after lengthening each curve event by the tolerance. The buffer method from Lecture 4 asks something else: is the crash's reported point within 150 ft of the curve line? Both run here on the same route's curves.

Inside the buffer
Outside the buffer
On a curve by milepoint
Both methods0
milepoint on a curve · inside the buffer
Milepoint only0
milepoint on a curve · outside the buffer
Not on a curve by milepoint
Buffer only0
not on a curve by milepoint · inside the buffer
Neither0
crashes on this route that neither method flags

Why the two methods disagree

    4 · Dynamic segmentation: cut the route into homogeneous pieces

    Overlay the line events with Overlay Route Events (UNION), so the route is cut wherever any of them starts or ends, then merge neighbours that still match with Dissolve Route Events. Every piece that comes out has one value for each attribute you split on, which is what a crash-rate or safety-performance study needs.

    Split where these change

    #From MPTo MPLength (mi)AADTLanesSpeed (mph)Func. classCurveCrashesCrashes per mile

    The crash table holds 480 crashes from a single day (1 October 2021), so these counts only illustrate the method. A real study counts several years of crashes and computes the crash rate of each segment in crashes per 100 million vehicle-miles:

    R = crashes × 108 / (AADT × 365 × years × length in miles)

    Try this in class

    1. Hover the straight-line diagram and watch the marker move along SR 154 on the map, then hover the map. Both views read the same measure. Find a place where the AADT row changes shade and read the marker on each side of the change.
    2. Drag the milepoint tolerance to 0 ft. The two Reynolds Rd crashes at MP 19.66 leave the milepoint method, because they sit just under 150 ft past the end of a curve, yet the 150 ft buffer still counts them. Then set the tolerance back to 150 ft.
    3. Read the two buffer-only crashes on SR 154. Their route IDs are city streets, so they happened on cross streets that pass within 150 ft of a curve. Should a study of curve crashes on SR 154 count them?
    4. Pick SR 401 (I-75), Fulton, D side. All four crash events land more than 50 ft from their reported coordinates, and the one at W Paces Ferry Rd lands 573 ft away. Discuss the possible causes: a wrong milepoint in the crash report, or crash milepoints and route measures taken from different versions of the road network.
    5. Pick SR 403 (I-85), Fulton, inventory direction. One crash cannot be placed because the route has no measure at its milepoint. Its report says I-75 at Langford Pkwy, on the Downtown Connector, where I-85 shares the road with I-75. Then find the buffer-only crashes that are coded on the D side.
    6. In step 4, untick “Curve on or off” and watch the number of segments drop, then tick “Functional class”. Which attribute cuts the route into the most pieces? Keep in mind that the crash sample covers only one day.

    The vocabulary

    TermWhat it means here
    RoutePolylineMA line with a route ID whose vertices also store a measure (m-value). Here each route is built from GDOT road segments sorted by their from-milepoint.
    Measuremilepoint, MPDistance along the route from its start, in miles. GDOT restarts the count at 0 at every county line.
    Point eventroute ID + measureA table row that says where something is by route and milepoint, such as a crash with Inventory_ and MilePoint_.
    Line eventroute ID + from + toA stretch of road with one value, such as a curve, an AADT count section or a speed zone.
    Dynamic segmentationtwo meaningsEsri's term for computing where events sit on the map from their measures, at display time. Safety analysts also use it for cutting a route into homogeneous segments.
    Calibrationmeasures vs groundAdjusting route measures so they match known milepoints on the road. Events only land in the right place when the events and the routes use the same calibration.

    Back to the lectures

    Linear referencing has no slide set of its own. It grows out of two things you already did: the crash table's route ID and milepoint fields in Lecture 3, and the curve buffer in Lecture 4.

    The crash table already holds eventsLecture 3 · Table operations

    The crash CSV you displayed with Display XY Data has the columns Inventory Route ID (Crash Level) and MilePoint (Crash Level), cut to Inventory_ and MilePoint_ in the shapefile. That pair is a point event. Placing it works like a Join: the route ID is the common key, many crashes match one route (many-to-one), and the milepoint says where along the route each row belongs.

    Crashes whose route ID is blank, or names a road that is not in the route layer, are the rows a join would leave unmatched.

    The buffer asks a different questionLecture 4 · Buffer and Select By Location

    The exercise draws a 150 ft round buffer around the D7 curves and selects the crashes inside it with Select By Location, then joins curve attributes to them with Spatial Join. That test uses only coordinates, so it also catches crashes on cross streets and on the other side of a divided road. The milepoint test uses only the route ID and the measure, so it misses crashes whose milepoint is wrong.

    Neither method is the truth on its own. A careful study runs both and checks the crashes they disagree on by hand.

    The tools in ArcGIS ProLinear Referencing toolbox

    • Create Routes builds routes from GeorgiaRoadSegments_SR with the route ID field, using two fields (from and to milepoint) as the measure source.
    • Locate Features Along Routes writes RID, FMEAS and TMEAS for line features such as curves, or RID and MEAS for points, within a search radius.
    • Make Route Event Layer places a table of crashes on the routes by route ID and milepoint.
    • Overlay Route Events: INTERSECT finds crashes inside curve events; UNION cuts line events into pieces.
    • Dissolve Route Events merges neighbouring pieces that share the same values.

    ArcMap has the same tools under the same names in its Linear Referencing toolbox.

    Pitfalls students hit

    • Milepoints are county-based. SR 154 in Fulton (1211015400I) and SR 154 in DeKalb (0891015400I) are different routes, each starting at MP 0. A milepoint without its full route ID means nothing.
    • I and D are different routes. A divided road has an inventory-direction route and a D route with their own measures. A crash coded on the D route never matches a curve on the I route, even when it sits right next to it.
    • Miles and feet. Milepoints are in miles; curve lengths, buffers and tolerances are in feet. 150 ft is 0.0284 mi. A tolerance typed as 150 in a miles field covers the whole county.
    • Route ID typos. One wrong character sends the event to another route or to none (ArcGIS marks it ROUTE NOT FOUND in the LOC_ERROR field). Keep route IDs as text so leading zeros such as 089 survive.
    • Calibration. Event milepoints and route measures must come from the same version of the road network. When they do not, events slide along the road. That may be what happens on I-75's D side in Fulton.