Есть ли в QGIS возможность рисовать параллельные линии, которые привязываются к внешней части линии (соседним линиям), которая не зависит от масштаба?

12

Я должен нарисовать карту сети общественного автобусного транспорта, и у меня есть проблема на проспектах, где проходит много линий. Моя цель - сделать визуальную карту, где линии в этих проспектах параллельны друг другу и без промежутков между ними, чтобы видеть все из них одновременно, независимо от масштаба.

Я пробовал варианты привязки и параллельного рисования (инструменты САПР), но проблема в том, что когда я меняю масштаб, расстояние между линиями меняется, и они сталкиваются или отделяют одну от другой, запутывая все.

Итак, мой вопрос:

  • Есть ли возможность рисовать смежные линии, которые остаются смежными независимо от масштаба визуализации?

Примечание: я не знаю, используется ли смежность для того, что я имею в виду, поэтому здесь я копирую пример того, что я ищу: Задача


Вот что происходит, когда я увеличиваю:

Приблизить

И когда я уменьшаю:

Уменьшить

РЕДАКТИРОВАТЬ: Здесь я разделяю ситуацию, почему предлагаемое решение не будет работать для меня. Три линии некоторое время разделяют одну и ту же улицу, но затем они разделяются на три разные улицы.

Трещина

Я не могу использовать одну линию с несколькими символами, потому что по всей сети линии разделяются и снова соединяются (имеется более 15 линий шины).

Данные, содержащиеся в данных атрибута, мне не помогают, потому что это всего лишь слой, заполненный линиями, без атрибута, кроме какой-либо сетевой информации (количество автобусов / час, пассажир / час и т. Д.). (QGIS 2.8.6 работает на Windows 7)

Андреу Аморос
источник
1
В QGIS 2.16 были представлены новые опции упрощения рендеринга . Хотя я не могу подтвердить, поможет ли это в вашей ситуации.
Джозеф
Я могу сделать это в ArcGIS for Desktop, установив эталонный масштаб для фрейма данных .
PolyGeo
Привет @PolyGeo, проблема с этим решением (которое может быть реализовано в QGIS с изменением единиц измерения на «единицу карты») заключается в том, что мне нужно, чтобы линии меняли свою ширину в зависимости от масштаба, но не от отношения между ними. Я знаю, что мне нужно что-то очень конкретное и сложное для реализации. Что-то более подходящее для Illustrator, чем для программного обеспечения ГИС. Спасибо за помощь!
Андреу Аморос
Все ли шейп-файлы линий лежат друг на друге или между ними уже есть какое-то смещение?
Джозеф
В некоторых случаях они лежат друг на друге, а в других - нет. Что вы предлагаете?
Андреу Аморос

Ответы:

6

Не уверен, что это то, что вам действительно нужно, но вы можете использовать одну строку с другой символикой, чтобы создать видимость двух параллельных линий.

Начиная с линии 1,1 км в CRS 3857 (метрика, псевдо-Mercator согласно Google и другим веб-службам):

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

В свойствах добавьте еще один слой символов (чтобы вы увидели две строки).

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

Установите ширину каждой линии в единицах карты - в этом случае единицы измерения - метры, и я выбрал ширину 50 метров, и установил смещение каждой линии равным половине их ширины, при этом одна из них имеет равный, но отрицательный смещение:

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

Это создает видимость, которую вы ищете:

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

... и это сохраняется в разных масштабах:

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

Simbamangu
источник
2
Я думал об этом, но это будет трудно иметь дело с разделением линий.
Виктор,
@Victor о разделении: вы можете создавать различные атрибуты, такие как «одна строка», «двойная линия» со значением True / False и использовать маркировку на основе правил.
sweet.sugar.cola
1
@Victor согласился, нужно получить больше информации от OP о характере данных; это решение может не работать в зависимости от того, как линии соединяются и разделяются.
Симбамангу
1
@ Андреу, возможно, вы можете нажать «изменить» в исходном сообщении и добавить эту информацию (и пример того, где это решение не будет работать ) и (еще лучше) пример данных?
Симбамангу
@Simbamangu Прежде всего, спасибо, что попробовали решение и поделились им со мной. Даже если это решение может работать в некоторых случаях, как сказал Виктор, его будет трудно использовать, когда линии отделены от других. Фактически, это происходит каждый раз, когда линии разделяются на разные улицы. Данные работают так: у меня все линии сети Bus в разных шейп-файлах. «Проблема» в том, что все они построены по-настоящему, поэтому, когда я выбираю более одного за раз, они сталкиваются. Поэтому моя цель - сделать карту, на которой вы сможете визуально увидеть всю сеть. Я отредактирую свой пост.
Андреу Аморос
3

Если под «опцией привязки» вы имеете в виду, что вы не можете изменить геометрию полилиний и можете изменить только их символы, то описанное вами практически невозможно.

Из ваших примеров вы, похоже, пытаетесь визуализировать полилинии таким образом, чтобы параллельные участки соприкасались друг с другом, не перекрывая друг друга, например, из-за того, что граница между двумя параллельными линиями поровну разделяла их расстояние разделения. Если мы рассмотрим представления полилинии как их буферы , то вы можете придумать случаи (аналогично вашему рис. 4), когда одна и та же линия должна иметь разную «буферную» ширину на разных участках (продиктованную ближайшими соседними линиями). Другими словами, ширина вашего буфера будет зависеть от других полилиний и может варьироваться в разных сегментах полилиний. Но обычно символизация использует только информацию / атрибуты самой функции.

Конечно, вы всегда можете использовать «буфер» фиксированного радиуса вокруг линий и вручную манипулировать вершинами (или редактировать буферы), чтобы границы привязывались друг к другу. Тогда буферы останутся «зажатыми» с увеличением / уменьшением масштаба, хотя это требует много ручного труда и может потребоваться корректировка, если добавляются новые строки.

tinlyx
источник
Спасибо за ответ. Я могу изменить геометрию полилиний, но так как существует много линий, пересекающих друг друга, и много разных комбинаций, это становится очень трудоемким и утомительным. Я пробовал буферное решение, но это даже сложнее, чем просто редактировать форму линий, потому что если нужно определить зависимую визуализацию во всех сегментах всех линий.
Андреу Аморос
1
@AndreuAmoros. Это именно то, что я предлагал. Редактирование строк (или связанных с ними «буферов») действительно занимает много времени, но это необходимо по характеру вашего требования, чтобы эти буферы привязывались друг к другу.
tinlyx