How can I calculate the straight distance from the start to the end point of a river (red line in image)? I don't know how to do this automatically.
You can use Feature Vertices to Points tool with the option to put the points at the Start and End of the line. Then use the Near tool or the Point Distance tool, this will then give you the linear distance between the end and start point. This can be added to a model to automate it.
It depends on what coordinate system you're using. If you are using a projected coordinate system (with units in meters or feet), you can use the field calculator (use the Python parser) with this expression:
Or if you want distance on the earth's surface (if you're using a geographic coordinate system with decimal degrees), check out the answer to this question for the haversine formula (https://stackoverflow.com/questions/4913349/haversine-formula-in-python-bearing-and-distance-between-two-gps-points). For this, you would put the haversine function in the code block of the field calculator and call on it in the expression below the code block.
Either way, the thing to use is the
EDIT: I just double checked the code and realized it needed some edits before it would work in a field calculator. If you're doing this in ArcMap, add a field (like endDist) of type double, select Python parser, and paste the following into the "Pre-Logic Script Code" window:
def haversine(lon1, lat1, lon2, lat2): """ Calculate the great circle distance between two points on the earth (specified in decimal degrees) """ # convert decimal degrees to radians lon1, lat1, lon2, lat2 = map(math.radians, [lon1, lat1, lon2, lat2]) # haversine formula dlon = lon2 - lon1 dlat = lat2 - lat1 a = math.sin(dlat/2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon/2)**2 c = 2 * math.asin(math.sqrt(a)) r = 6371 # Radius of earth in kilometers. Use 3956 for miles return c * r
With the following expression:
haversine(!SHAPE!.firstPoint.X, !SHAPE!.firstPoint.Y, !SHAPE!.lastPoint.X, !SHAPE!.lastPoint.Y)
That will work. Hope that helps!