Нахождение расстояния между точками вдоль реки (Линейная привязка)

10

Я новичок в ГИС и поражен. У меня есть сеть рек, которая состоит из небольших полос (полилиний). В другом шейп-файле у меня есть местоположения нескольких станций на реке. Мне нужно найти расстояние вдоль реки от каждой станции до конца реки.

Проблема в том, что у меня нет одной полной линии реки. И нет общего атрибута, который я мог бы использовать для объединения или объединения строк. Также некоторые станции находятся на притоках.

введите описание изображения здесь

Итак, суть в том, что мне нужно создать большую сеть рек, включая притоки, и выполнить привязку лайнера. Но я не знаю, как это сделать. Любая помощь высоко ценится. Пожалуйста, объясните как можно более четко.

Пожалуйста, прокомментируйте, если вам нужна дополнительная информация.

Naresh
источник
3
Какую программную платформу вы используете?
TheSteve0
я попробовал arcmap arcinfo. Но это была огромная информация о линейных ссылках. Затем я перешел на pgRouting и QGIS. Все еще борется.
Нареш
У вас есть доступ к расширению ArcGIS Network Analyst? Я думаю, что было бы возможно построить набор сетевых данных, используя ваши реки, и тогда найти кратчайшие расстояния должно быть действительно легко.
Радек

Ответы:

2

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

Чтобы найти это место, вы можете использовать инструменты ArcMap, но не пользовались ими какое-то время, так что не могу вспомнить верхнюю часть моей головы. С другой стороны, если вы импортируете свои шейп-файлы (?) В PostGIS, вы можете использовать ST_Line_Locate_Point . Эта функция:

Возвращает число с плавающей точкой от 0 до 1, представляющее местоположение ближайшей точки на LineString к данной точке, в виде доли от общей длины 2d линии.

Это означает, что вы можете найти местоположение вдоль реки, умножив то, что вы найдете, на (объединенную) длину реки. Последнее замечание: если вы используете PostGIS, вам не нужно проходить этап создания PolylineM - только для ArcGIS это требуется для линейных ссылок.

Надеюсь, что это имеет смысл!

mapoholic
источник
мои станции точно на притоках или реке. Глупость в том, что нет ни одной большой реки, только маленькие отрезки линий. Я вижу большую реку, но сами данные не имеют какого-либо общего атрибута для создания полной реки. Кроме того, у меня есть координаты в градусах, поэтому, когда я создаю маршруты в arcmap, я получаю длину в градусах? Я думаю, что это не имеет смысла. Я должен преобразовать координаты из wgs84 в другую проекцию. И да, я импортировал шейп-файлы в PostGIS.
Нареш
1

Из моего вопроса того же характера,

Как создать точку вдоль линии на заданном расстоянии

появились следующие полезные ссылки.
grass.osgeo.org/gdp/html_grass63/lrs.html
wiki.faunalia.it/dokuwiki/doku.php/qgis/lrs

Я не выполняю свою задачу из-за отсутствия усилий. Я полагаю, что скука, которую вы испытаете, определяет происхождение каждой полилинии.

BWill
источник
2
я добился определенного прогресса Я могу найти кратчайший путь, используя pGrouting, но мне нужно обновить "узлы". Прямо сейчас я создаю таблицу узлов в postgresql и использую ее для создания сети, которую я передаю в pgrouting. Но мне нужно добавить пользовательские узлы в таблицу, которые не находятся на конечных узлах. Глупым способом является разделение моих полилиний на станциях, чтобы они автоматически становились узлами. Еще работает. Обновление скоро.
Нареш