Замена тяжелых данных PostGIS линией
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 20 сен 2017, 15:27
- Репутация: 0
- Откуда: Иркутск
Замена тяжелых данных PostGIS линией
Добрый день, нужна помощь с запросами PostGIS.
Есть очень "тяжелые данные" (около 2 миллионов точек) с геохимическими измерениями в базе PostGIS, и выводить их на карту Leaflet - не очень хорошая идея. Сеть измерений настолько частая, что фактически сливается в линию и тяжело переваривается компьютером. Идея такая:
1)Есть 4 класса, на которые можно разбить все данные по тому или иному атрибуту (содержанию определенного вещества)
2)создать столбец, в который записать соответствующий класс
3)Все стоящие друг за другом точки с одинаковыми классами объединить в линию.
Как написать запрос с преобразованием точек в ломаную линию? Будет ли это легче отрисовывать? Если это дурацкая идея, помогите пожалуйста советом с визуализацией "тяжелых данных"
Есть очень "тяжелые данные" (около 2 миллионов точек) с геохимическими измерениями в базе PostGIS, и выводить их на карту Leaflet - не очень хорошая идея. Сеть измерений настолько частая, что фактически сливается в линию и тяжело переваривается компьютером. Идея такая:
1)Есть 4 класса, на которые можно разбить все данные по тому или иному атрибуту (содержанию определенного вещества)
2)создать столбец, в который записать соответствующий класс
3)Все стоящие друг за другом точки с одинаковыми классами объединить в линию.
Как написать запрос с преобразованием точек в ломаную линию? Будет ли это легче отрисовывать? Если это дурацкая идея, помогите пожалуйста советом с визуализацией "тяжелых данных"
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 20 сен 2017, 15:27
- Репутация: 0
- Откуда: Иркутск
Re: Замена тяжелых данных PostGIS линией
знаю об этом, но видите ли, это будет совсем не информативно, на мой взгляд. Данные по геохимии воды, и писались треком на сотни километров в процессе плавания и выглядят в виде вытянутой линии.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Замена тяжелых данных PostGIS линией
Как написать запрос с преобразованием точек в ломаную линию?
Код: Выделить всё
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 $$
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 20 сен 2017, 15:27
- Репутация: 0
- Откуда: Иркутск
Re: Замена тяжелых данных PostGIS линией
Очень благодарен за помощь. Попробую
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Замена тяжелых данных PostGIS линией
Не мудрите, для вывода интерполируйте на растр, обрежьте по границе воды, и нашинкуйте тайлы. Будет красиво и быстро. А на большом зуме подменяйте точками, их будет немного.
P.S. Для водохранилища с притоками мы когда-то делали такую приблуду для мапинфы ...
P.S. Для водохранилища с притоками мы когда-то делали такую приблуду для мапинфы ...
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Замена тяжелых данных PostGIS линией
В PostGIS есть ST_MakeLine
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 20 сен 2017, 15:27
- Репутация: 0
- Откуда: Иркутск
Re: Замена тяжелых данных PostGIS линией
После дня плясок с бубном у меня получилось соединить все точки по возрастанию времени, до этого была видимо неправильная геометрия.
Код: Выделить всё
CREATE TABLE test2 as
SELECT ST_MakeLine ("geom" ORDER BY timestamp ASC) AS geom2
from first
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Замена тяжелых данных PostGIS линией
group by класс?
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Замена тяжелых данных PostGIS линией
Ещё наверное упростить надо, а то в чём выгода, если там 100500 точек на одной прямой.
-
- Новоприбывший
- Сообщения: 14
- Зарегистрирован: 20 сен 2017, 15:27
- Репутация: 0
- Откуда: Иркутск
Re: Замена тяжелых данных PostGIS линией
Если я дописываю GROUP BY CLASS, то он просто группирует все значения с одинаковыми классами и делает их линиями. Да, я получаю 4 линии 4 классов, но тогда PostGIS не берет в расчет, что в разрыв линии может включаться другой класс
viewtopic.php?f=19&t=21702 нашёл в чем-то похожую тему, но не могу понять саму суть запроса, который там пишется.
Я пытаюсь такой запрос:
Код: Выделить всё
SELECT
ST_Makeline(p1, p2) as geom, id, num, class
FROM
(SELECT
id, row_number() over w as num, class, geom as p1, lead(geom) over w as p2
FROM first
window w as (partition by class order by timestamp)
)
as query where p2 is not NULL
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 31 гость