Страница 1 из 1

Создание линий маршрутов по точкам

Добавлено: 22 июл 2017, 23:09
pavel_surkov
Добрый вечер. Я новичок, не могу решить одну задачу. Задача следующая. На морских картах нанесены рекомендованные маршруты. У некоторых маршрутов есть общие точки. Хочу все точки внести в одну таблицу и присвоить им номера. А потом построить линии необходимых маршрутов по указаным номерам точек, после посчитать длинну каждого маршрута. Если такое в QGIS возможно, подскажите пожалуйста, как это сделать.

[ Сообщение с мобильного устройства ]

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 09:37
ANAT01
Импортируете точки в виде точек (csv), соединяете точки в линии плагином https://plugins.qgis.org/plugins/points2one/

Маршруты в таком случае должны быть в разных csv

[ Сообщение с мобильного устройства ]

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 12:01
trir
Такое удобнее делать в БД, но нужно знать SQL

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 15:32
pavel_surkov
Спасибо за совет, а подскажите пожалуйста, какую БЛ лучше использовать?

[ Сообщение с мобильного устройства ]

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:03
trir
сложный вопрос, под windows для обучения лучше подходит MS SQL Server - есть документация на русском и книжек много. Для работы лучше всего PostGIS.

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:14
Игорь Белов
Базы данных? «Ну вы совсем того!» ©

Импортируйте точки в QGIS; включите прилипание к ним; создайте слой линий; отрисуйте маршруты; выведите длины линий.

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:34
trir
зачем ручками, когда можно запросом?

Код: Выделить всё

PROCEDURE `CreateTrkLine`(nid INT)
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE coup, i INT DEFAULT 0;
  DECLARE p1, p2, CrP point;
  DECLARE CrLn LineString;
  DECLARE Cur1 Cursor FOR
   SELECT p FROM `gpx_db`.`trkpt` WHERE trk_id=nid AND nseg=1;
  DECLARE Continue Handler FOR NOT found SET done = 1;
 
  OPEN Cur1;
  Repeat
   Fetch Cur1 INTO CrP;
    IF NOT Done THEN
     CASE i
      WHEN 0 THEN
       SET p1 = geomfromtext(concat('Point(', X(CrP), ' ', Y(CrP), ')'));
      WHEN 1 THEN
       SET CrLn = geometryfromtext(concat('LineString(',x(p1),' ',y(p1),',',x(CrP),' ',y(CrP),')'));
      ELSE
       SET CrLn = `LS_AddPoint`(CrLn, CrP);
     END CASE;
     SET i=i+1;
    END IF;
  Until done END Repeat;
  Close Cur1;
 
  UPDATE trk SET `trk_line`=CrLn WHERE id=nid;
END $$

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:44
Игорь Белов
И в чём преимущество? В том, чтобы, глядя на карты, ручками вносить номера точек в списки, неизбежно внося ошибки при набивке? Не проще ли прямо на картах провести маршруты через нужные точки? Результат сразу готов, и не надо делать запросы, а потом искать, в каких списках косяки с номерами поворотных точек.

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:47
trir
так маршруты уже есть, дальше пара запросов - и готово, банальная нормализация данных

Re: Создание линий маршрутов по точкам

Добавлено: 23 июл 2017, 18:50
Игорь Белов
trir писал(а):так маршруты уже есть
А Вы перечитайте стартовый пост внимательно.