Skip to content
Snippets Groups Projects
Commit 0962912b authored by antoine-de's avatar antoine-de
Browse files

Merge branch 'fix/pic-dist' into 'develop'

Max distance between pictures set to 75m (fixes #177)

Closes #177

See merge request !300
parents bc1f60f7 2470f44d
Branches
Tags
Loading
......@@ -27,6 +27,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/panoramax/clients/web-viewer) was em
- Reject duplicates pictures (same md5). A configuration `API_ACCEPT_DUPLICATE` can make the instance accepts duplicates as before.
- The background jobs have been changed, it should be transparent for the administrator, but they now rely on the new `job_queue` table, and can handle more types of async jobs.
- More metadata can be set on API (name, description, logo and main color) in `API_SUMMARY` setting. This is served through `/api/configuration` and `/api` routes for client-side display.
- Maximum authorized distance between two consecutive pictures in a same segment of a sequence is now 75 meters (distance at 135km/h during two seconds). This only changes map rendering, to avoid sequences cuts over motorways.
### Fixed
......
-- sequence_geom_multi_linestring
-- depends: 20240220_01_9wZs0-sequence-current-sort
CREATE OR REPLACE FUNCTION compute_sequence_geom(IN sequence_id UUID) RETURNS GEOMETRY(MultiLineString, 4326) AS $$
WITH
all_pics AS (
SELECT p.geom AS geom, sp.seq_id
FROM sequences_pictures sp
JOIN pictures p ON sp.pic_id = p.id
WHERE sp.seq_id = sequence_id
ORDER BY sp.rank
)
, pic_as_line AS (
SELECT seq_id, ST_MakeLine(geom) AS geom
FROM all_pics
GROUP BY seq_id
)
, segments as (
SELECT
seq_id,
(ST_DumpSegments(geom)).geom AS segment
FROM pic_as_line
)
-- make a multiline geometry for the sequence, spliting each pictures separated by more than 50 meters
, seq_geom as (
SELECT
seq_id,
ST_LineMerge(ST_Collect(segment)) as geom
FROM segments
WHERE ST_Length(segment::geography) < 50
GROUP BY seq_id
)
, seq_multi_ls_geom as (
SELECT
seq_id,
ST_Multi(geom) as geom
FROM seq_geom
WHERE NOT ST_IsEmpty(geom)
)
SELECT seq_multi_ls_geom.geom
FROM seq_multi_ls_geom;
$$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
\ No newline at end of file
-- sequences_geom_splits
-- depends: 20240801_01_uKqPo-remove-files-delete-cascade
-- Change sequence split value to 75 meters (distance made at 135km/h during two seconds)
CREATE OR REPLACE FUNCTION compute_sequence_geom(IN sequence_id UUID) RETURNS GEOMETRY(MultiLineString, 4326) AS $$
WITH
all_pics AS (
SELECT p.geom AS geom, sp.seq_id
FROM sequences_pictures sp
JOIN pictures p ON sp.pic_id = p.id
WHERE sp.seq_id = sequence_id
ORDER BY sp.rank
)
, pic_as_line AS (
SELECT seq_id, ST_MakeLine(geom) AS geom
FROM all_pics
GROUP BY seq_id
)
, segments as (
SELECT
seq_id,
(ST_DumpSegments(geom)).geom AS segment
FROM pic_as_line
)
-- make a multiline geometry for the sequence, spliting each pictures separated by more than 75 meters
, seq_geom as (
SELECT
seq_id,
ST_LineMerge(ST_Collect(segment)) as geom
FROM segments
WHERE ST_Length(segment::geography) <= 75
GROUP BY seq_id
)
, seq_multi_ls_geom as (
SELECT
seq_id,
ST_Multi(geom) as geom
FROM seq_geom
WHERE NOT ST_IsEmpty(geom)
)
SELECT seq_multi_ls_geom.geom
FROM seq_multi_ls_geom;
$$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE;
-- Update sequences geometries
DROP TRIGGER sequences_update_ts_trg ON sequences;
UPDATE sequences
SET geom = compute_sequence_geom(id)
WHERE ST_NumGeometries(geom) > 1;
-- Restore all deactivated triggers
CREATE TRIGGER sequences_update_ts_trg
BEFORE UPDATE ON sequences
FOR EACH ROW
EXECUTE FUNCTION sequences_update_ts();
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment