Skip to content

Commit

Permalink
Fix Postgis function case and underscores
Browse files Browse the repository at this point in the history
  • Loading branch information
Gaël UTARD committed Apr 4, 2019
1 parent 945e4b2 commit aaa8afd
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 53 deletions.
2 changes: 1 addition & 1 deletion geotrek/altimetry/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def elevation_profile(cls, geometry3d, precision=None, offset=0):
# Add measure to 2D version of geometry3d
# Get distance from origin for each vertex
sql = """
WITH line2d AS (SELECT ST_force_2D('%(ewkt)s'::geometry) AS geom),
WITH line2d AS (SELECT ST_Force2D('%(ewkt)s'::geometry) AS geom),
line_measure AS (SELECT ST_Addmeasure(geom, 0, ST_length(geom)) AS geom FROM line2d),
points2dm AS (SELECT (ST_DumpPoints(geom)).geom AS point FROM line_measure)
SELECT (%(offset)s + ST_M(point)) FROM points2dm;
Expand Down
6 changes: 3 additions & 3 deletions geotrek/altimetry/sql/10_utilities.sql
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ BEGIN
END IF;
END LOOP;

points_output := array_append(points_output, ST_MAKEPOINT(ST_X(points[i]), ST_Y(points[i]), (current_values / count_values)::integer));
points_output := array_append(points_output, ST_MakePoint(ST_X(points[i]), ST_Y(points[i]), (current_values / count_values)::integer));


END LOOP;
--RAISE EXCEPTION 'Nonexistent ID --> %', ST_ASEWKT(ST_SetSRID(ST_MakeLine(points_output), ST_SRID(linegeom)));
--RAISE EXCEPTION 'Nonexistent ID --> %', ST_AsEWKT(ST_SetSRID(ST_MakeLine(points_output), ST_SRID(linegeom)));

RETURN QUERY SELECT (ST_DumpPoints(ST_SetSRID(ST_MakeLine(points_output), ST_SRID(linegeom)))).geom as geom;

Expand Down Expand Up @@ -292,7 +292,7 @@ BEGIN
-- Compute gain using simplification
-- see http://www.postgis.org/docs/ST_Simplify.html
-- https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
FOR current IN SELECT (ST_DUMPPOINTS(ST_MAKELINE(points3d_smoothed))).geom
FOR current IN SELECT (ST_DumpPoints(ST_MakeLine(points3d_smoothed))).geom
LOOP
-- Add positive only if current - previous_geom > 0
result.positive_gain := result.positive_gain + greatest(ST_Z(current) - coalesce(ST_Z(previous_geom),
Expand Down
20 changes: 10 additions & 10 deletions geotrek/api/v2/functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

def Transform(geom, srid):
"""
ST_TRANSFORM postgis function
ST_Transform postgis function
"""
return Func(geom, srid, function='ST_TRANSFORM')
return Func(geom, srid, function='ST_Transform')


def Buffer(geom, radius, num_seg):
Expand All @@ -28,9 +28,9 @@ def GeometryType(geom):

class Length(Func):
"""
ST_LENGTH postgis function
ST_Length postgis function
"""
function = 'ST_LENGTH'
function = 'ST_Length'
output_field = FloatField()


Expand All @@ -44,23 +44,23 @@ class Length3D(Func):

class Area(Func):
"""
ST_AREA postgis function
ST_Area postgis function
"""
function = 'ST_AREA'
function = 'ST_Area'
output_field = FloatField()


class StartPoint(Func):
"""
ST_TRANSFORM postgis function
ST_StartPoint postgis function
"""
function = 'ST_STARTPOINT'
function = 'ST_StartPoint'
output_field = PointField()


class EndPoint(Func):
"""
ST_TRANSFORM postgis function
ST_EndPoint postgis function
"""
function = 'ST_ENDPOINT'
function = 'ST_EndPoint'
output_field = PointField()
2 changes: 1 addition & 1 deletion geotrek/common/utils/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ def intersecting(cls, obj, distance=None):
if obj.geom.geom_type == 'LineString':
# FIXME: move transform from DRF viewset to DRF itself and remove transform here
ewkt = obj.geom.transform(settings.SRID, clone=True).ewkt
qs = qs.extra(select={'ordering': 'ST_Line_Locate_Point(ST_GeomFromEWKT(\'{ewkt}\'), ST_StartPoint((ST_Dump(ST_Intersection(ST_GeomFromEWKT(\'{ewkt}\'), geom))).geom))'.format(ewkt=ewkt)})
qs = qs.extra(select={'ordering': 'ST_LineLocatePoint(ST_GeomFromEWKT(\'{ewkt}\'), ST_StartPoint((ST_Dump(ST_Intersection(ST_GeomFromEWKT(\'{ewkt}\'), geom))).geom))'.format(ewkt=ewkt)})
qs = qs.extra(order_by=['ordering'])
if obj.__class__ == cls:
# Prevent self intersection
Expand Down
2 changes: 1 addition & 1 deletion geotrek/core/management/commands/remove_duplicate_paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def handle(self, *args, **options):
query = """with relations as (SELECT t1.id as t1_id,
t2.id as t2_id
FROM l_t_troncon t1
JOIN l_t_troncon t2 ON t1.id < t2.id AND ST_ORDERINGEQUALS(t1.geom, t2.geom)
JOIN l_t_troncon t2 ON t1.id < t2.id AND ST_OrderingEquals(t1.geom, t2.geom)
ORDER BY t1.id, t2.id)
SELECT * FROM relations WHERE t1_id NOT IN (SELECT t2_id FROM relations) """
cursor.execute(query)
Expand Down
22 changes: 11 additions & 11 deletions geotrek/core/sql/50_troncons_split.sql
Original file line number Diff line number Diff line change
Expand Up @@ -119,19 +119,19 @@ BEGIN
WHERE id != NEW.id
AND brouillon = FALSE
AND NEW.brouillon = FALSE
AND ST_DWITHIN(t.geom, NEW.geom, 0)
AND ST_DWithin(t.geom, NEW.geom, 0)
AND GeometryType(ST_Intersection(geom, NEW.geom)) NOT IN ('LINESTRING', 'MULTILINESTRING')
LOOP

RAISE NOTICE '%-% (%) intersects %-% (%) : %', NEW.id, NEW.nom, ST_AsText(NEW.geom), troncon.id, troncon.nom, ST_AsText(troncon.geom), ST_AsText(ST_Intersection(troncon.geom, NEW.geom));

-- Locate intersecting point(s) on NEW, for later use
FOR fraction IN SELECT ST_Line_Locate_Point(NEW.geom,
(ST_Dump(ST_Intersection(troncon.geom, NEW.geom))).geom)
WHERE NOT ST_EQUALS(ST_STARTPOINT(NEW.geom), ST_STARTPOINT(troncon.geom))
AND NOT ST_EQUALS(ST_STARTPOINT(NEW.geom), ST_ENDPOINT(troncon.geom))
AND NOT ST_EQUALS(ST_ENDPOINT(NEW.geom), ST_STARTPOINT(troncon.geom))
AND NOT ST_EQUALS(ST_ENDPOINT(NEW.geom), ST_ENDPOINT(troncon.geom))
FOR fraction IN SELECT ST_LineLocatePoint(NEW.geom,
(ST_Dump(ST_Intersection(troncon.geom, NEW.geom))).geom)
WHERE NOT ST_Equals(ST_StartPoint(NEW.geom), ST_StartPoint(troncon.geom))
AND NOT ST_Equals(ST_StartPoint(NEW.geom), ST_EndPoint(troncon.geom))
AND NOT ST_Equals(ST_EndPoint(NEW.geom), ST_StartPoint(troncon.geom))
AND NOT ST_Equals(ST_EndPoint(NEW.geom), ST_EndPoint(troncon.geom))
LOOP
intersections_on_new := array_append(intersections_on_new, fraction);
END LOOP;
Expand All @@ -144,18 +144,18 @@ BEGIN
-- Locate intersecting point(s) on current path (array of : {0, 0.32, 0.89, 1})
intersections_on_current := ARRAY[0::float];

IF ST_DWITHIN(ST_STARTPOINT(NEW.geom), troncon.geom, 0)
IF ST_DWithin(ST_StartPoint(NEW.geom), troncon.geom, 0)
THEN
intersections_on_current := array_append(intersections_on_current,
ST_LineLocatePoint(troncon.geom,
ST_CLOSESTPOINT(troncon.geom, ST_STARTPOINT(NEW.geom))));
ST_ClosestPoint(troncon.geom, ST_StartPoint(NEW.geom))));
END IF;

IF ST_DWITHIN(ST_ENDPOINT(NEW.geom), troncon.geom, 0)
IF ST_DWithin(ST_EndPoint(NEW.geom), troncon.geom, 0)
THEN
intersections_on_current := array_append(intersections_on_current,
ST_LineLocatePoint(troncon.geom,
ST_CLOSESTPOINT(troncon.geom, ST_ENDPOINT(NEW.geom))));
ST_ClosestPoint(troncon.geom, ST_EndPoint(NEW.geom))));

END IF;
RAISE NOTICE 'EEE : %', array_to_string(intersections_on_current, ', ');
Expand Down
50 changes: 25 additions & 25 deletions geotrek/core/sql/70_troncons_merge.sql
Original file line number Diff line number Diff line change
Expand Up @@ -28,45 +28,45 @@ BEGIN
merged_geom := (SELECT geom FROM l_t_troncon WHERE id = merged);

-- DETECT matching point to rebuild path line
IF ST_EQUALS(ST_STARTPOINT(updated_geom), ST_STARTPOINT(merged_geom))
IF ST_Equals(ST_StartPoint(updated_geom), ST_StartPoint(merged_geom))
THEN
rebuild_line := ST_MAKELINE(ST_REVERSE(updated_geom), merged_geom);
rebuild_line := ST_MakeLine(ST_Reverse(updated_geom), merged_geom);
reverse_update := TRUE;

ELSIF ST_EQUALS(ST_STARTPOINT(updated_geom), ST_ENDPOINT(merged_geom))
ELSIF ST_Equals(ST_StartPoint(updated_geom), ST_EndPoint(merged_geom))
THEN
rebuild_line := ST_MAKELINE(ST_REVERSE(updated_geom), ST_REVERSE(merged_geom));
rebuild_line := ST_MakeLine(ST_Reverse(updated_geom), ST_Reverse(merged_geom));
reverse_update := TRUE;
reverse_merged := TRUE;

ELSIF ST_EQUALS(ST_ENDPOINT(updated_geom), ST_ENDPOINT(merged_geom))
ELSIF ST_Equals(ST_EndPoint(updated_geom), ST_EndPoint(merged_geom))
THEN
rebuild_line := ST_MAKELINE(updated_geom, ST_REVERSE(merged_geom));
rebuild_line := ST_MakeLine(updated_geom, ST_Reverse(merged_geom));
reverse_merged := TRUE;

ELSIF ST_EQUALS(ST_ENDPOINT(updated_geom), ST_STARTPOINT(merged_geom))
ELSIF ST_Equals(ST_EndPoint(updated_geom), ST_StartPoint(merged_geom))
THEN
rebuild_line := ST_MAKELINE(updated_geom, merged_geom);
rebuild_line := ST_MakeLine(updated_geom, merged_geom);

ELSIF (ST_DISTANCE(ST_STARTPOINT(updated_geom), ST_STARTPOINT(merged_geom))::float <= max_snap_distance)
ELSIF (ST_Distance(ST_StartPoint(updated_geom), ST_StartPoint(merged_geom))::float <= max_snap_distance)
THEN
rebuild_line := ST_MAKELINE(ST_REVERSE(updated_geom), merged_geom);
rebuild_line := ST_MakeLine(ST_Reverse(updated_geom), merged_geom);
reverse_update := TRUE;

ELSIF (ST_DISTANCE(ST_STARTPOINT(updated_geom), ST_ENDPOINT(merged_geom)) <= max_snap_distance)
ELSIF (ST_Distance(ST_StartPoint(updated_geom), ST_EndPoint(merged_geom)) <= max_snap_distance)
THEN
rebuild_line := ST_MAKELINE(ST_REVERSE(updated_geom), ST_REVERSE(merged_geom));
rebuild_line := ST_MakeLine(ST_Reverse(updated_geom), ST_Reverse(merged_geom));
reverse_update := TRUE;
reverse_merged := TRUE;

ELSIF (ST_DISTANCE(ST_ENDPOINT(updated_geom), ST_ENDPOINT(merged_geom)) <= max_snap_distance)
ELSIF (ST_Distance(ST_EndPoint(updated_geom), ST_EndPoint(merged_geom)) <= max_snap_distance)
THEN
rebuild_line := ST_MAKELINE(updated_geom, ST_REVERSE(merged_geom));
rebuild_line := ST_MakeLine(updated_geom, ST_Reverse(merged_geom));
reverse_merged := TRUE;

ELSIF (ST_DISTANCE(ST_ENDPOINT(updated_geom), ST_STARTPOINT(merged_geom)) <= max_snap_distance)
ELSIF (ST_Distance(ST_EndPoint(updated_geom), ST_StartPoint(merged_geom)) <= max_snap_distance)
THEN
rebuild_line := ST_MAKELINE(updated_geom, merged_geom);
rebuild_line := ST_MakeLine(updated_geom, merged_geom);

ELSE
-- no snapping -> END !
Expand All @@ -77,7 +77,7 @@ BEGIN
FOR element IN
SELECT * FROM l_t_troncon WHERE id != updated AND id != merged
LOOP
IF ST_EQUALS(ST_STARTPOINT(updated_geom), ST_STARTPOINT(element.geom)) OR ST_EQUALS(ST_ENDPOINT(updated_geom), ST_STARTPOINT(element.geom)) OR ST_EQUALS(ST_STARTPOINT(updated_geom), ST_ENDPOINT(element.geom)) OR ST_EQUALS(ST_ENDPOINT(updated_geom), ST_ENDPOINT(element.geom))
IF ST_Equals(ST_StartPoint(updated_geom), ST_StartPoint(element.geom)) OR ST_Equals(ST_EndPoint(updated_geom), ST_StartPoint(element.geom)) OR ST_Equals(ST_StartPoint(updated_geom), ST_EndPoint(element.geom)) OR ST_Equals(ST_EndPoint(updated_geom), ST_EndPoint(element.geom))
THEN
RETURN 2;
END IF;
Expand All @@ -94,17 +94,17 @@ BEGIN
THEN
-- update reverse pk
UPDATE e_r_evenement_troncon
SET pk_debut = (1- pk_debut) * ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom)),
pk_fin = (1- pk_fin) * ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))
SET pk_debut = (1- pk_debut) * ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom)),
pk_fin = (1- pk_fin) * ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))
WHERE id = element.id;
-- update reverse offset
UPDATE e_t_evenement
SET decallage = -decallage
WHERE id = element.evenement;
ELSE
UPDATE e_r_evenement_troncon
SET pk_debut = pk_debut * ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom)),
pk_fin = pk_fin * ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))
SET pk_debut = pk_debut * ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom)),
pk_fin = pk_fin * ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))
WHERE id = element.id;
END IF;
END LOOP;
Expand All @@ -119,17 +119,17 @@ BEGIN
IF reverse_merged = TRUE
THEN
UPDATE e_r_evenement_troncon
SET pk_debut = ((1- pk_debut) * ST_LENGTH(merged_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))) + (ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))),
pk_fin = ((1- pk_fin) * ST_LENGTH(merged_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))) + (ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom)))
SET pk_debut = ((1- pk_debut) * ST_Length(merged_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))) + (ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))),
pk_fin = ((1- pk_fin) * ST_Length(merged_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))) + (ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom)))
WHERE id = element.id;

UPDATE e_t_evenement
SET decallage = -decallage
WHERE id = element.evenement;
ELSE
UPDATE e_r_evenement_troncon
SET pk_debut = (pk_debut * ST_LENGTH(merged_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))) + (ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))),
pk_fin = (pk_fin * ST_LENGTH(merged_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom))) + (ST_LENGTH(updated_geom) / (ST_LENGTH(updated_geom) + ST_LENGTH(merged_geom)))
SET pk_debut = (pk_debut * ST_Length(merged_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))) + (ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))),
pk_fin = (pk_fin * ST_Length(merged_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom))) + (ST_Length(updated_geom) / (ST_Length(updated_geom) + ST_Length(merged_geom)))
WHERE id = element.id;
END IF;
END LOOP;
Expand Down
2 changes: 1 addition & 1 deletion geotrek/maintenance/sql/20_views.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CREATE OR REPLACE VIEW gestion.m_v_intervention AS (
);

CREATE OR REPLACE VIEW gestion.m_v_chantier AS (
SELECT ST_UNION(t.geom) AS geom_chantier, s.*
SELECT ST_Union(t.geom) AS geom_chantier, s.*
FROM m_v_intervention AS t, m_t_chantier AS s
WHERE t.chantier = s.id
GROUP BY t.chantier, s.id
Expand Down

0 comments on commit aaa8afd

Please sign in to comment.