Я бы согласился с BWill. Ваша главная проблема - определить происхождение каждой полилинии. Что представляет собой «река»? Make сделало бы предположение, что приток является автономным «маршрутом», начинающимся с 0-> длины притока. Тогда я сделал бы то же самое для главных рек, но в этом случае я бы создал объединенную полилинию из всех составляющих полилиний. Я думаю, что как только вы это сделаете, вы «почти» там. Затем: преобразуйте все ваши объединенные полилинии в измеренные полилинии (PolylineM), включая притоки. Затем у вас есть «сеть маршрутов». С этого момента вопрос определения расстояния по маршруту для каждой станции. Я предполагаю, что местоположения станций определены в XY? Также - другое предположение - они не падают точно на реку, они? В любом случае вам понадобится способ найти расстояние от станции до начала каждой реки или трибура. Теоретически, если станция находится на пересечении реки и притока, она может иметь 2 местоположения (по одному для каждого).
Чтобы найти это место, вы можете использовать инструменты ArcMap, но не пользовались ими какое-то время, так что не могу вспомнить верхнюю часть моей головы. С другой стороны, если вы импортируете свои шейп-файлы (?) В PostGIS, вы можете использовать ST_Line_Locate_Point . Эта функция:
Возвращает число с плавающей точкой от 0 до 1, представляющее местоположение ближайшей точки на LineString к данной точке, в виде доли от общей длины 2d линии.
Это означает, что вы можете найти местоположение вдоль реки, умножив то, что вы найдете, на (объединенную) длину реки. Последнее замечание: если вы используете PostGIS, вам не нужно проходить этап создания PolylineM - только для ArcGIS это требуется для линейных ссылок.
Надеюсь, что это имеет смысл!