-
Notifications
You must be signed in to change notification settings - Fork 77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use PGRouting to handle routing directly in Database through API #4070
Draft
justinefricou
wants to merge
169
commits into
master
Choose a base branch
from
move_routing_to_backend
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as outdated.
Chatewgne
reviewed
Apr 19, 2024
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
April 26, 2024 09:38
7e1392b
to
d793ab7
Compare
Chatewgne
previously requested changes
Apr 29, 2024
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
May 3, 2024 09:40
1e85200
to
338c6a1
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
May 17, 2024 13:10
e3bdca4
to
685a790
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
2 times, most recently
from
June 4, 2024 14:45
c9952df
to
3bc7f0e
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
2 times, most recently
from
June 12, 2024 15:59
561a44b
to
dab9c50
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
3 times, most recently
from
July 9, 2024 14:14
8258a95
to
10425c8
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
July 11, 2024 08:47
4f94203
to
a4d732b
Compare
Chatewgne
reviewed
Jul 11, 2024
justinefricou
force-pushed
the
move_routing_to_backend
branch
2 times, most recently
from
July 30, 2024 08:24
a843b59
to
e1311b9
Compare
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
August 28, 2024 07:35
7c0b5ba
to
42e23bc
Compare
submarcos
force-pushed
the
move_routing_to_backend
branch
from
September 4, 2024 11:05
42e23bc
to
7e9c1eb
Compare
submarcos
changed the title
Move routing to backend
Use PGRouting to handle routing directly in Database through API
Sep 13, 2024
submarcos
reviewed
Sep 13, 2024
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
November 28, 2024 16:23
529cff2
to
f46462f
Compare
submarcos
reviewed
Nov 29, 2024
* Add TrekGeometry view with get and post methods * Add a parameter to TrekGeometry post method * Add graph and steps info being sent to TrekGeometry view * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Add computing of the path to follow (node to node) (handles whole edges with their default direction) * Modify path in response: it's now from start to end * Refacto: nodes idx to id correspondence * Add structure of algorithm handling partial edges and more than 2 steps * ADD handling of edge percentage and more than 2 markers * Add display of a hard-coded polyline sent from the TrekGeometry view * The graph is directly taken from the backend * Add handling of GPS coordinates as input * Add use of Point ewkt when using sql * Add TODOs for next step: obtaining a LineString from dijkstra results * Starting to work on converting the resulting nodes list into LineStrings * Add conversion of dijstra results into a displayed Linestring * Correctng some comments * Fix path not computed if adjacent steps are on the same edge * Fix negative dijkstra weight when we're going backwards relative to a Path direction * Fix path not computed when going backwards on a Path if going through several edges * Starting to display fetched route instead of locally computed route * Preparing topology_helper to handle several linestrings * Automating the geojson generation in the view * Add handling of several steps * Replacing MultiLineString by GeometryCollection in Response * Fixing the organization of layers in the displayed path * Removing old code related to the graph * Removing old code * Removing old code * Making the TrekGeometry post method into a PathViewSet action * Reordering PathRouter methods * Removing graph action of PathViewSet * Moving initial graph generation into the PathRouter class * Removing no longer used imports * Renaming graph.py to path_router.py * Adding parameters error handling for the route_geometry action * Using dict.update instead of a custom method * Adding status codes to Responses * Optimizing the cs_graph generation (generating the upper triangle then filling the lower triangle symmetrically) * Optimizing matrix generation: it is now generated at init and modified depending on the current steps * Optimizing matrix generation by using its symmetrical property * Refactoring: making duplicate code into a method * The route is now fetched only when the marker dragging stops * Saving the dijkstra matrix in the cache * Saving the path graph in the cache * Moving duplicate cache-related code into a single method * Add handling of an impossible path: the view returns a status 204 and the js does not attempt to display the path * Modify error handling in js: using Promise.reject * Correct returns when no path could be found Methods that return an array when a path is found now return [] instead of None if no path can be found * Replaces status 204 by status 400 when no path can be found * Add a spinner when the route is being fetched * Add sending of the modified steps indexes to fetchRoute * Adds fetching of the route for only the modified steps * Add algorithm that updates the displayed route layers * Add use of currently displayed layers indexes to replace them * Fix replacing the currently displayed layers indexes by new ones * Fix updating layers not working after removing a marker * Bump leaflet.textpath.js to v1.1.0 * Move leaflet static files into a vendor directory * Bump leaflet.lineextremities.js to v0.1.1 * Fix missing path layer when an unlinkable via marker is removed * Remove console logs * Add coloring of the markers when one is isolated * Add coloring of all markers to normal appearance when back to normal * Add enabling/disabling of markers drag when a route is correct/incorrect * Add enabling/disabling of markers deletion when a route is correct/incorrect * Add impossibility of creating new via-steps while the route is invalid * Move spinner.stop() into a finally() * Fix one route layer missing when an isolated via-step is corrected * Add deletion of a marker if not dropped on a path * Add resetting of a marker to its previous valid position when not dropped on a path * Fix isolated marker highlight being removed when reset to its previous position * Remove duplicate part of code * Remove hiding of route layer when the start or end marker is moved * Fix out of date step idx used when deleting a via point * Add display of an error toast when a marker is incorrect * Modify error_toast elements class names for genericity * Fix toast stacking: top toast not on the bottom when it's the only one displayed * Fix wrong marker being deleted after trying to create an unsnapped marker * Fix route layer not displayed after start and end markers created and unlinkable * Add disabling of markers when the route is being fetched * Add saving of the route topology through the form * Add modification of the route topology through the edit form * Fix Geotrek object no longer created before use * Remove use of non-sparse matrix for dijkstra (using csr_array) * Modify use of sparse array (using lil_array instead of csr_array) * Optimize dijkstra matrix generation * Remove calls to now deleted js scripts * Remove no longer used methods * Add benchmarking system based on frontend routing version * Fix typo in cypress.config.js * Startng to work on adapting frontend benchmark system for backend * Add record of the number of runs for a benchmark measure * Modify route control clicking via cypress - Path elements' data-test attributes are now set when they are added to the page - Cypress test waits for the data-test attribute to be added before clicking on the route control * Replace broken 3 via-pts topology with a 2 via-pts topology * Modify cypress benchmark: adapt the frontend version to work with backend * Modify python time measures: now in milliseconds instead of seconds * Modify time measurement: startTime is now recorded before the click/drop event * Modify benchmark.sh: making the session id a variable * Add scenario using the big DB and no via point * Add display of current branch name for each measure * Replace big database no via pts scenario with 25 via pts scenario * Add readme for the benchmarking system * Modify benchmarking script: cypress spec file and session id are now passed as command line arguments * Fix crash when computing time averages if a file is missing * Add 2 via-pts topology for big database * Replace 25-via-pts scenario with 2-via-pts scenario for big database * Add unit tests for route_geometry view (check of request body) * Modify cypress timeouts: now 30min * Start to work on impossible and possible path test cases * Add check of lat and lng type and range in route_geometry view * Fix request body not sent in the right format (route_geometry tests) * Add new scenario for big DB with no via point * Add test case: steps not on paths * Add test case: steps one paths not linked * Add tests for route_geometry view * Fix test for the route_geometry view * Remove prints * Move benchmarking directory into tools/ * Fix norm * Modify Cypress 'create trek' test after routing changes * Try to fix cypress e2e tests * Uncomment env_dev settings * Modify Cypress e2e tests: actually click on paths to create a trek * Remove console.log and debugger * Fix cypress e2e tests: id of clicked path * Add test case for route_geometry view: error 500 * Try to fix cypress tests: ensure the topology control is enabled before clicking on it * Comment content of test_graph temporarily * Adapt graph generation tests to the new routing system * Add tests for path_router * Add unit test for cache handling in path_router * Fix cache-related test for PathRouter * Modify test_route_geometry_not_fail_with_via_points_several_paths to include more cases * Modify route_geometry tests: more precision when checking results * Remove old unit test for route_geometry view * Remove redundant unit test for path_router * Add script to take backend time measures * Add steps for route with 100 via-pts for backend time measures script * Fix topology used in 100-via-pts fixture * Add big database topology in backend time measuring script * Improve readability of path_router test: using yied * Update benchmark README to include the new script * Fix requirements.txt after rebase * Modify leaflet map: start spinner and disable markers ASAP * Modify leaflet map: stop spinner and reenable markers as late as possible * Adapt backend benchmark script to new PR * Modify display of route layers: only redisplay those affected by a route modification * Fix route modif not saved if an incorrect marker has been fixed * Fix path layers not displayed at creation * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Modify docker-compose to use pgrouting image * Add routing with pgRouting for hard-coded topology * Add use of request latlngs for pgRouting * Generate linestrings for routes with no via-pts * Add display of the route (geometry is wrong on last edge) * Add generation of the serialized topology * Remove old dijkstra-related methods * Remove old dijkstra-related imports * Fix route always containing the whole last path instead of a fraction of it * Replace call to ST_Linesubstring by ST_SmartLineSubstring to split start and end edges * Fix route geometry reversed when a path is taken from its end to its start * Remove LineString rounding before merging * Fix route topology not correct when a path is taken in reverse * Remove prints * Uncomment try except * Add source and target columns to core_path table for pgRouting * Add error handling when no path is found * Remove out of date unit tests * Add use of settings PATH_SNAPPING_DISTANCE for pgRouting tolerance * Add extensions required for database * Modify database extensions * Remove unused imports after rebase * Fix postgres images for github CI * Add setting of source and target to null for a path that is being split * Modify routing: don't try to route on draft paths * Fix routing taking too much time (unnecessary recalculation of graph) * Move setting of pgRouting-related values to null from specific case to trigger after geom is updated * Fix PathViewsTest test_route_geometry_not_fail_no_via_point_one_path * Fix no route found when a marker is on a path's extremity (0 or 1) * Fix verification of serialized positions in tests (wrong format) * Modify how the closest path is found: get it from the front rather than the back * Fix routing tests: create a path before sending the request with a path_id * Fix norm * Delete now empty test_path_router.py * Modify routing conditions: don't route on paths whose visiblity is set to false * Remove modification of geom_3d as a condition for setting pgRouting-related values to null in trigger * Fix incorrect path id test (wrong lng used) * Add checking of error messages for route_geometry unit tests * Add more detailed check of response values for route_geometry tests * Add test cases for route_geometry: draft and invisible paths, editing geom, adding / deleting paths * Add django command to generate pgRouting network topology * Add unit test for command generate_pgr_network_topology * Add entry in doc explaining how to use the generate_pgr_network_topology command * Move tests docstrings descriptions to top * Add docstrings to path_router * Adapt backend benchmark script for new PR * manage pgrouting in nstall scripts * enable pgrouting extension in debian postinst * Update benchmark system for pgRouting * fix tests and viewset permission * prevent flaky test * Update docs/install/import.rst * fix rebase * fix rebase --------- Co-authored-by: JustineFricou <[email protected]> Co-authored-by: J-E Castagnede <[email protected]>
justinefricou
force-pushed
the
move_routing_to_backend
branch
from
December 11, 2024 13:35
7d3529a
to
738e74c
Compare
…the response data doesn't have to be checked again
* Optimize dijkstra matrix generation * Remove calls to now deleted js scripts * Remove no longer used methods * Add benchmarking system based on frontend routing version * Fix typo in cypress.config.js * Startng to work on adapting frontend benchmark system for backend * Add record of the number of runs for a benchmark measure * Modify route control clicking via cypress - Path elements' data-test attributes are now set when they are added to the page - Cypress test waits for the data-test attribute to be added before clicking on the route control * Replace broken 3 via-pts topology with a 2 via-pts topology * Modify cypress benchmark: adapt the frontend version to work with backend * Modify python time measures: now in milliseconds instead of seconds * Modify time measurement: startTime is now recorded before the click/drop event * Modify benchmark.sh: making the session id a variable * Add scenario using the big DB and no via point * Add display of current branch name for each measure * Replace big database no via pts scenario with 25 via pts scenario * Add readme for the benchmarking system * Modify benchmarking script: cypress spec file and session id are now passed as command line arguments * Fix crash when computing time averages if a file is missing * Add 2 via-pts topology for big database * Replace 25-via-pts scenario with 2-via-pts scenario for big database * Add unit tests for route_geometry view (check of request body) * Modify cypress timeouts: now 30min * Start to work on impossible and possible path test cases * Add check of lat and lng type and range in route_geometry view * Fix request body not sent in the right format (route_geometry tests) * Add new scenario for big DB with no via point * Add test case: steps not on paths * Add test case: steps one paths not linked * Add tests for route_geometry view * Fix test for the route_geometry view * Remove prints * Move benchmarking directory into tools/ * Fix norm * Modify Cypress 'create trek' test after routing changes * Try to fix cypress e2e tests * Uncomment env_dev settings * Modify Cypress e2e tests: actually click on paths to create a trek * Remove console.log and debugger * Fix cypress e2e tests: id of clicked path * Add test case for route_geometry view: error 500 * Try to fix cypress tests: ensure the topology control is enabled before clicking on it * Comment content of test_graph temporarily * Adapt graph generation tests to the new routing system * Add tests for path_router * Add unit test for cache handling in path_router * Fix cache-related test for PathRouter * Modify test_route_geometry_not_fail_with_via_points_several_paths to include more cases * Modify route_geometry tests: more precision when checking results * Remove old unit test for route_geometry view * Remove redundant unit test for path_router * Add script to take backend time measures * Add steps for route with 100 via-pts for backend time measures script * Fix topology used in 100-via-pts fixture * Add big database topology in backend time measuring script * Improve readability of path_router test: using yied * Update benchmark README to include the new script * Fix requirements.txt after rebase * Modify leaflet map: start spinner and disable markers ASAP * Modify leaflet map: stop spinner and reenable markers as late as possible * Adapt backend benchmark script to new PR * Modify display of route layers: only redisplay those affected by a route modification * Fix route modif not saved if an incorrect marker has been fixed * Fix path layers not displayed at creation * Update docs/install/import.rst * fix rebase * fix rebase * Modify routing alorithm: use pgr A* - route is found - geometry's direction not correct yet - topology's directions and fractions not correct yet * Fix route topology extremities taking the whole edge * Fix direction of route topology and geometry * Fix generation of topology (start and end fractions) * Fix computation of more than 2 steps not possible: temp tables not dropped * Fix multilistrings sometimes not merging * Remove comments and prints * Improve precision of coordinates rounding * Use pg routing (#4245) * Add TrekGeometry view with get and post methods * Add a parameter to TrekGeometry post method * Add graph and steps info being sent to TrekGeometry view * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Add computing of the path to follow (node to node) (handles whole edges with their default direction) * Modify path in response: it's now from start to end * Refacto: nodes idx to id correspondence * Add structure of algorithm handling partial edges and more than 2 steps * ADD handling of edge percentage and more than 2 markers * Add display of a hard-coded polyline sent from the TrekGeometry view * The graph is directly taken from the backend * Add handling of GPS coordinates as input * Add use of Point ewkt when using sql * Add TODOs for next step: obtaining a LineString from dijkstra results * Starting to work on converting the resulting nodes list into LineStrings * Add conversion of dijstra results into a displayed Linestring * Correctng some comments * Fix path not computed if adjacent steps are on the same edge * Fix negative dijkstra weight when we're going backwards relative to a Path direction * Fix path not computed when going backwards on a Path if going through several edges * Starting to display fetched route instead of locally computed route * Preparing topology_helper to handle several linestrings * Automating the geojson generation in the view * Add handling of several steps * Replacing MultiLineString by GeometryCollection in Response * Fixing the organization of layers in the displayed path * Removing old code related to the graph * Removing old code * Removing old code * Making the TrekGeometry post method into a PathViewSet action * Reordering PathRouter methods * Removing graph action of PathViewSet * Moving initial graph generation into the PathRouter class * Removing no longer used imports * Renaming graph.py to path_router.py * Adding parameters error handling for the route_geometry action * Using dict.update instead of a custom method * Adding status codes to Responses * Optimizing the cs_graph generation (generating the upper triangle then filling the lower triangle symmetrically) * Optimizing matrix generation: it is now generated at init and modified depending on the current steps * Optimizing matrix generation by using its symmetrical property * Refactoring: making duplicate code into a method * The route is now fetched only when the marker dragging stops * Saving the dijkstra matrix in the cache * Saving the path graph in the cache * Moving duplicate cache-related code into a single method * Add handling of an impossible path: the view returns a status 204 and the js does not attempt to display the path * Modify error handling in js: using Promise.reject * Correct returns when no path could be found Methods that return an array when a path is found now return [] instead of None if no path can be found * Replaces status 204 by status 400 when no path can be found * Add a spinner when the route is being fetched * Add sending of the modified steps indexes to fetchRoute * Adds fetching of the route for only the modified steps * Add algorithm that updates the displayed route layers * Add use of currently displayed layers indexes to replace them * Fix replacing the currently displayed layers indexes by new ones * Fix updating layers not working after removing a marker * Bump leaflet.textpath.js to v1.1.0 * Move leaflet static files into a vendor directory * Bump leaflet.lineextremities.js to v0.1.1 * Fix missing path layer when an unlinkable via marker is removed * Remove console logs * Add coloring of the markers when one is isolated * Add coloring of all markers to normal appearance when back to normal * Add enabling/disabling of markers drag when a route is correct/incorrect * Add enabling/disabling of markers deletion when a route is correct/incorrect * Add impossibility of creating new via-steps while the route is invalid * Move spinner.stop() into a finally() * Fix one route layer missing when an isolated via-step is corrected * Add deletion of a marker if not dropped on a path * Add resetting of a marker to its previous valid position when not dropped on a path * Fix isolated marker highlight being removed when reset to its previous position * Remove duplicate part of code * Remove hiding of route layer when the start or end marker is moved * Fix out of date step idx used when deleting a via point * Add display of an error toast when a marker is incorrect * Modify error_toast elements class names for genericity * Fix toast stacking: top toast not on the bottom when it's the only one displayed * Fix wrong marker being deleted after trying to create an unsnapped marker * Fix route layer not displayed after start and end markers created and unlinkable * Add disabling of markers when the route is being fetched * Add saving of the route topology through the form * Add modification of the route topology through the edit form * Fix Geotrek object no longer created before use * Remove use of non-sparse matrix for dijkstra (using csr_array) * Modify use of sparse array (using lil_array instead of csr_array) * Optimize dijkstra matrix generation * Remove calls to now deleted js scripts * Remove no longer used methods * Add benchmarking system based on frontend routing version * Fix typo in cypress.config.js * Startng to work on adapting frontend benchmark system for backend * Add record of the number of runs for a benchmark measure * Modify route control clicking via cypress - Path elements' data-test attributes are now set when they are added to the page - Cypress test waits for the data-test attribute to be added before clicking on the route control * Replace broken 3 via-pts topology with a 2 via-pts topology * Modify cypress benchmark: adapt the frontend version to work with backend * Modify python time measures: now in milliseconds instead of seconds * Modify time measurement: startTime is now recorded before the click/drop event * Modify benchmark.sh: making the session id a variable * Add scenario using the big DB and no via point * Add display of current branch name for each measure * Replace big database no via pts scenario with 25 via pts scenario * Add readme for the benchmarking system * Modify benchmarking script: cypress spec file and session id are now passed as command line arguments * Fix crash when computing time averages if a file is missing * Add 2 via-pts topology for big database * Replace 25-via-pts scenario with 2-via-pts scenario for big database * Add unit tests for route_geometry view (check of request body) * Modify cypress timeouts: now 30min * Start to work on impossible and possible path test cases * Add check of lat and lng type and range in route_geometry view * Fix request body not sent in the right format (route_geometry tests) * Add new scenario for big DB with no via point * Add test case: steps not on paths * Add test case: steps one paths not linked * Add tests for route_geometry view * Fix test for the route_geometry view * Remove prints * Move benchmarking directory into tools/ * Fix norm * Modify Cypress 'create trek' test after routing changes * Try to fix cypress e2e tests * Uncomment env_dev settings * Modify Cypress e2e tests: actually click on paths to create a trek * Remove console.log and debugger * Fix cypress e2e tests: id of clicked path * Add test case for route_geometry view: error 500 * Try to fix cypress tests: ensure the topology control is enabled before clicking on it * Comment content of test_graph temporarily * Adapt graph generation tests to the new routing system * Add tests for path_router * Add unit test for cache handling in path_router * Fix cache-related test for PathRouter * Modify test_route_geometry_not_fail_with_via_points_several_paths to include more cases * Modify route_geometry tests: more precision when checking results * Remove old unit test for route_geometry view * Remove redundant unit test for path_router * Add script to take backend time measures * Add steps for route with 100 via-pts for backend time measures script * Fix topology used in 100-via-pts fixture * Add big database topology in backend time measuring script * Improve readability of path_router test: using yied * Update benchmark README to include the new script * Fix requirements.txt after rebase * Modify leaflet map: start spinner and disable markers ASAP * Modify leaflet map: stop spinner and reenable markers as late as possible * Adapt backend benchmark script to new PR * Modify display of route layers: only redisplay those affected by a route modification * Fix route modif not saved if an incorrect marker has been fixed * Fix path layers not displayed at creation * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Modify docker-compose to use pgrouting image * Add routing with pgRouting for hard-coded topology * Add use of request latlngs for pgRouting * Generate linestrings for routes with no via-pts * Add display of the route (geometry is wrong on last edge) * Add generation of the serialized topology * Remove old dijkstra-related methods * Remove old dijkstra-related imports * Fix route always containing the whole last path instead of a fraction of it * Replace call to ST_Linesubstring by ST_SmartLineSubstring to split start and end edges * Fix route geometry reversed when a path is taken from its end to its start * Remove LineString rounding before merging * Fix route topology not correct when a path is taken in reverse * Remove prints * Uncomment try except * Add source and target columns to core_path table for pgRouting * Add error handling when no path is found * Remove out of date unit tests * Add use of settings PATH_SNAPPING_DISTANCE for pgRouting tolerance * Add extensions required for database * Modify database extensions * Remove unused imports after rebase * Fix postgres images for github CI * Add setting of source and target to null for a path that is being split * Modify routing: don't try to route on draft paths * Fix routing taking too much time (unnecessary recalculation of graph) * Move setting of pgRouting-related values to null from specific case to trigger after geom is updated * Fix PathViewsTest test_route_geometry_not_fail_no_via_point_one_path * Fix no route found when a marker is on a path's extremity (0 or 1) * Fix verification of serialized positions in tests (wrong format) * Modify how the closest path is found: get it from the front rather than the back * Fix routing tests: create a path before sending the request with a path_id * Fix norm * Delete now empty test_path_router.py * Modify routing conditions: don't route on paths whose visiblity is set to false * Remove modification of geom_3d as a condition for setting pgRouting-related values to null in trigger * Fix incorrect path id test (wrong lng used) * Add checking of error messages for route_geometry unit tests * Add more detailed check of response values for route_geometry tests * Add test cases for route_geometry: draft and invisible paths, editing geom, adding / deleting paths * Add django command to generate pgRouting network topology * Add unit test for command generate_pgr_network_topology * Add entry in doc explaining how to use the generate_pgr_network_topology command * Move tests docstrings descriptions to top * Add docstrings to path_router * Adapt backend benchmark script for new PR * manage pgrouting in nstall scripts * enable pgrouting extension in debian postinst * Update benchmark system for pgRouting * fix tests and viewset permission * prevent flaky test * Update docs/install/import.rst * fix rebase * fix rebase --------- Co-authored-by: JustineFricou <[email protected]> Co-authored-by: J-E Castagnede <[email protected]> * Apply suggestions from code review delete scipy dependencies * 🐛 [BUG] Fix reset layer * 🏗 [MAINT] Remove unused dependency scipy * 🏗 [MAINT] Remove unused dependency scipy * Add TrekGeometry view with get and post methods * Add a parameter to TrekGeometry post method * Add graph and steps info being sent to TrekGeometry view * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Add computing of the path to follow (node to node) (handles whole edges with their default direction) * Modify path in response: it's now from start to end * Refacto: nodes idx to id correspondence * Add structure of algorithm handling partial edges and more than 2 steps * ADD handling of edge percentage and more than 2 markers * Add display of a hard-coded polyline sent from the TrekGeometry view * The graph is directly taken from the backend * Add handling of GPS coordinates as input * Add use of Point ewkt when using sql * Add TODOs for next step: obtaining a LineString from dijkstra results * Starting to work on converting the resulting nodes list into LineStrings * Add conversion of dijstra results into a displayed Linestring * Correctng some comments * Fix path not computed if adjacent steps are on the same edge * Fix negative dijkstra weight when we're going backwards relative to a Path direction * Fix path not computed when going backwards on a Path if going through several edges * Starting to display fetched route instead of locally computed route * Preparing topology_helper to handle several linestrings * Automating the geojson generation in the view * Add handling of several steps * Replacing MultiLineString by GeometryCollection in Response * Fixing the organization of layers in the displayed path * Removing old code related to the graph * Removing old code * Removing old code * Making the TrekGeometry post method into a PathViewSet action * Reordering PathRouter methods * Removing graph action of PathViewSet * Moving initial graph generation into the PathRouter class * Removing no longer used imports * Renaming graph.py to path_router.py * Adding parameters error handling for the route_geometry action * Using dict.update instead of a custom method * Adding status codes to Responses * Optimizing the cs_graph generation (generating the upper triangle then filling the lower triangle symmetrically) * Optimizing matrix generation: it is now generated at init and modified depending on the current steps * Optimizing matrix generation by using its symmetrical property * Refactoring: making duplicate code into a method * The route is now fetched only when the marker dragging stops * Saving the dijkstra matrix in the cache * Saving the path graph in the cache * Moving duplicate cache-related code into a single method * Add handling of an impossible path: the view returns a status 204 and the js does not attempt to display the path * Modify error handling in js: using Promise.reject * Correct returns when no path could be found Methods that return an array when a path is found now return [] instead of None if no path can be found * Replaces status 204 by status 400 when no path can be found * Add a spinner when the route is being fetched * Add sending of the modified steps indexes to fetchRoute * Adds fetching of the route for only the modified steps * Add algorithm that updates the displayed route layers * Add use of currently displayed layers indexes to replace them * Fix replacing the currently displayed layers indexes by new ones * Fix updating layers not working after removing a marker * Bump leaflet.textpath.js to v1.1.0 * Move leaflet static files into a vendor directory * Bump leaflet.lineextremities.js to v0.1.1 * Fix missing path layer when an unlinkable via marker is removed * Remove console logs * Add coloring of the markers when one is isolated * Add coloring of all markers to normal appearance when back to normal * Add enabling/disabling of markers drag when a route is correct/incorrect * Add enabling/disabling of markers deletion when a route is correct/incorrect * Add impossibility of creating new via-steps while the route is invalid * Move spinner.stop() into a finally() * Fix one route layer missing when an isolated via-step is corrected * Add deletion of a marker if not dropped on a path * Add resetting of a marker to its previous valid position when not dropped on a path * Fix isolated marker highlight being removed when reset to its previous position * Remove duplicate part of code * Remove hiding of route layer when the start or end marker is moved * Fix out of date step idx used when deleting a via point * Add display of an error toast when a marker is incorrect * Modify error_toast elements class names for genericity * Fix toast stacking: top toast not on the bottom when it's the only one displayed * Fix wrong marker being deleted after trying to create an unsnapped marker * Fix route layer not displayed after start and end markers created and unlinkable * Add disabling of markers when the route is being fetched * Add saving of the route topology through the form * Add modification of the route topology through the edit form * Fix Geotrek object no longer created before use * Remove use of non-sparse matrix for dijkstra (using csr_array) * Modify use of sparse array (using lil_array instead of csr_array) * Optimize dijkstra matrix generation * Remove calls to now deleted js scripts * Remove no longer used methods * Add benchmarking system based on frontend routing version * Fix typo in cypress.config.js * Startng to work on adapting frontend benchmark system for backend * Add record of the number of runs for a benchmark measure * Modify route control clicking via cypress - Path elements' data-test attributes are now set when they are added to the page - Cypress test waits for the data-test attribute to be added before clicking on the route control * Replace broken 3 via-pts topology with a 2 via-pts topology * Modify cypress benchmark: adapt the frontend version to work with backend * Modify python time measures: now in milliseconds instead of seconds * Modify time measurement: startTime is now recorded before the click/drop event * Modify benchmark.sh: making the session id a variable * Add scenario using the big DB and no via point * Add display of current branch name for each measure * Replace big database no via pts scenario with 25 via pts scenario * Add readme for the benchmarking system * Modify benchmarking script: cypress spec file and session id are now passed as command line arguments * Fix crash when computing time averages if a file is missing * Add 2 via-pts topology for big database * Replace 25-via-pts scenario with 2-via-pts scenario for big database * Add unit tests for route_geometry view (check of request body) * Modify cypress timeouts: now 30min * Start to work on impossible and possible path test cases * Add check of lat and lng type and range in route_geometry view * Fix request body not sent in the right format (route_geometry tests) * Add new scenario for big DB with no via point * Add test case: steps not on paths * Add test case: steps one paths not linked * Add tests for route_geometry view * Fix test for the route_geometry view * Remove prints * Move benchmarking directory into tools/ * Fix norm * Modify Cypress 'create trek' test after routing changes * Try to fix cypress e2e tests * Uncomment env_dev settings * Modify Cypress e2e tests: actually click on paths to create a trek * Remove console.log and debugger * Fix cypress e2e tests: id of clicked path * Add test case for route_geometry view: error 500 * Try to fix cypress tests: ensure the topology control is enabled before clicking on it * Comment content of test_graph temporarily * Adapt graph generation tests to the new routing system * Add tests for path_router * Add unit test for cache handling in path_router * Fix cache-related test for PathRouter * Modify test_route_geometry_not_fail_with_via_points_several_paths to include more cases * Modify route_geometry tests: more precision when checking results * Remove old unit test for route_geometry view * Remove redundant unit test for path_router * Add script to take backend time measures * Add steps for route with 100 via-pts for backend time measures script * Fix topology used in 100-via-pts fixture * Add big database topology in backend time measuring script * Improve readability of path_router test: using yied * Update benchmark README to include the new script * Fix requirements.txt after rebase * Modify leaflet map: start spinner and disable markers ASAP * Modify leaflet map: stop spinner and reenable markers as late as possible * Adapt backend benchmark script to new PR * Modify display of route layers: only redisplay those affected by a route modification * Fix route modif not saved if an incorrect marker has been fixed * Fix path layers not displayed at creation * Use pg routing (#4245) * Add TrekGeometry view with get and post methods * Add a parameter to TrekGeometry post method * Add graph and steps info being sent to TrekGeometry view * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Add computing of the path to follow (node to node) (handles whole edges with their default direction) * Modify path in response: it's now from start to end * Refacto: nodes idx to id correspondence * Add structure of algorithm handling partial edges and more than 2 steps * ADD handling of edge percentage and more than 2 markers * Add display of a hard-coded polyline sent from the TrekGeometry view * The graph is directly taken from the backend * Add handling of GPS coordinates as input * Add use of Point ewkt when using sql * Add TODOs for next step: obtaining a LineString from dijkstra results * Starting to work on converting the resulting nodes list into LineStrings * Add conversion of dijstra results into a displayed Linestring * Correctng some comments * Fix path not computed if adjacent steps are on the same edge * Fix negative dijkstra weight when we're going backwards relative to a Path direction * Fix path not computed when going backwards on a Path if going through several edges * Starting to display fetched route instead of locally computed route * Preparing topology_helper to handle several linestrings * Automating the geojson generation in the view * Add handling of several steps * Replacing MultiLineString by GeometryCollection in Response * Fixing the organization of layers in the displayed path * Removing old code related to the graph * Removing old code * Removing old code * Making the TrekGeometry post method into a PathViewSet action * Reordering PathRouter methods * Removing graph action of PathViewSet * Moving initial graph generation into the PathRouter class * Removing no longer used imports * Renaming graph.py to path_router.py * Adding parameters error handling for the route_geometry action * Using dict.update instead of a custom method * Adding status codes to Responses * Optimizing the cs_graph generation (generating the upper triangle then filling the lower triangle symmetrically) * Optimizing matrix generation: it is now generated at init and modified depending on the current steps * Optimizing matrix generation by using its symmetrical property * Refactoring: making duplicate code into a method * The route is now fetched only when the marker dragging stops * Saving the dijkstra matrix in the cache * Saving the path graph in the cache * Moving duplicate cache-related code into a single method * Add handling of an impossible path: the view returns a status 204 and the js does not attempt to display the path * Modify error handling in js: using Promise.reject * Correct returns when no path could be found Methods that return an array when a path is found now return [] instead of None if no path can be found * Replaces status 204 by status 400 when no path can be found * Add a spinner when the route is being fetched * Add sending of the modified steps indexes to fetchRoute * Adds fetching of the route for only the modified steps * Add algorithm that updates the displayed route layers * Add use of currently displayed layers indexes to replace them * Fix replacing the currently displayed layers indexes by new ones * Fix updating layers not working after removing a marker * Bump leaflet.textpath.js to v1.1.0 * Move leaflet static files into a vendor directory * Bump leaflet.lineextremities.js to v0.1.1 * Fix missing path layer when an unlinkable via marker is removed * Remove console logs * Add coloring of the markers when one is isolated * Add coloring of all markers to normal appearance when back to normal * Add enabling/disabling of markers drag when a route is correct/incorrect * Add enabling/disabling of markers deletion when a route is correct/incorrect * Add impossibility of creating new via-steps while the route is invalid * Move spinner.stop() into a finally() * Fix one route layer missing when an isolated via-step is corrected * Add deletion of a marker if not dropped on a path * Add resetting of a marker to its previous valid position when not dropped on a path * Fix isolated marker highlight being removed when reset to its previous position * Remove duplicate part of code * Remove hiding of route layer when the start or end marker is moved * Fix out of date step idx used when deleting a via point * Add display of an error toast when a marker is incorrect * Modify error_toast elements class names for genericity * Fix toast stacking: top toast not on the bottom when it's the only one displayed * Fix wrong marker being deleted after trying to create an unsnapped marker * Fix route layer not displayed after start and end markers created and unlinkable * Add disabling of markers when the route is being fetched * Add saving of the route topology through the form * Add modification of the route topology through the edit form * Fix Geotrek object no longer created before use * Remove use of non-sparse matrix for dijkstra (using csr_array) * Modify use of sparse array (using lil_array instead of csr_array) * Optimize dijkstra matrix generation * Remove calls to now deleted js scripts * Remove no longer used methods * Add benchmarking system based on frontend routing version * Fix typo in cypress.config.js * Startng to work on adapting frontend benchmark system for backend * Add record of the number of runs for a benchmark measure * Modify route control clicking via cypress - Path elements' data-test attributes are now set when they are added to the page - Cypress test waits for the data-test attribute to be added before clicking on the route control * Replace broken 3 via-pts topology with a 2 via-pts topology * Modify cypress benchmark: adapt the frontend version to work with backend * Modify python time measures: now in milliseconds instead of seconds * Modify time measurement: startTime is now recorded before the click/drop event * Modify benchmark.sh: making the session id a variable * Add scenario using the big DB and no via point * Add display of current branch name for each measure * Replace big database no via pts scenario with 25 via pts scenario * Add readme for the benchmarking system * Modify benchmarking script: cypress spec file and session id are now passed as command line arguments * Fix crash when computing time averages if a file is missing * Add 2 via-pts topology for big database * Replace 25-via-pts scenario with 2-via-pts scenario for big database * Add unit tests for route_geometry view (check of request body) * Modify cypress timeouts: now 30min * Start to work on impossible and possible path test cases * Add check of lat and lng type and range in route_geometry view * Fix request body not sent in the right format (route_geometry tests) * Add new scenario for big DB with no via point * Add test case: steps not on paths * Add test case: steps one paths not linked * Add tests for route_geometry view * Fix test for the route_geometry view * Remove prints * Move benchmarking directory into tools/ * Fix norm * Modify Cypress 'create trek' test after routing changes * Try to fix cypress e2e tests * Uncomment env_dev settings * Modify Cypress e2e tests: actually click on paths to create a trek * Remove console.log and debugger * Fix cypress e2e tests: id of clicked path * Add test case for route_geometry view: error 500 * Try to fix cypress tests: ensure the topology control is enabled before clicking on it * Comment content of test_graph temporarily * Adapt graph generation tests to the new routing system * Add tests for path_router * Add unit test for cache handling in path_router * Fix cache-related test for PathRouter * Modify test_route_geometry_not_fail_with_via_points_several_paths to include more cases * Modify route_geometry tests: more precision when checking results * Remove old unit test for route_geometry view * Remove redundant unit test for path_router * Add script to take backend time measures * Add steps for route with 100 via-pts for backend time measures script * Fix topology used in 100-via-pts fixture * Add big database topology in backend time measuring script * Improve readability of path_router test: using yied * Update benchmark README to include the new script * Fix requirements.txt after rebase * Modify leaflet map: start spinner and disable markers ASAP * Modify leaflet map: stop spinner and reenable markers as late as possible * Adapt backend benchmark script to new PR * Modify display of route layers: only redisplay those affected by a route modification * Fix route modif not saved if an incorrect marker has been fixed * Fix path layers not displayed at creation * Add computing of the dijkstra matrix and start and end nodes (only handling whole edges with their default direction) * Modify docker-compose to use pgrouting image * Add routing with pgRouting for hard-coded topology * Add use of request latlngs for pgRouting * Generate linestrings for routes with no via-pts * Add display of the route (geometry is wrong on last edge) * Add generation of the serialized topology * Remove old dijkstra-related methods * Remove old dijkstra-related imports * Fix route always containing the whole last path instead of a fraction of it * Replace call to ST_Linesubstring by ST_SmartLineSubstring to split start and end edges * Fix route geometry reversed when a path is taken from its end to its start * Remove LineString rounding before merging * Fix route topology not correct when a path is taken in reverse * Remove prints * Uncomment try except * Add source and target columns to core_path table for pgRouting * Add error handling when no path is found * Remove out of date unit tests * Add use of settings PATH_SNAPPING_DISTANCE for pgRouting tolerance * Add extensions required for database * Modify database extensions * Remove unused imports after rebase * Fix postgres images for github CI * Add setting of source and target to null for a path that is being split * Modify routing: don't try to route on draft paths * Fix routing taking too much time (unnecessary recalculation of graph) * Move setting of pgRouting-related values to null from specific case to trigger after geom is updated * Fix PathViewsTest test_route_geometry_not_fail_no_via_point_one_path * Fix no route found when a marker is on a path's extremity (0 or 1) * Fix verification of serialized positions in tests (wrong format) * Modify how the closest path is found: get it from the front rather than the back * Fix routing tests: create a path before sending the request with a path_id * Fix norm * Delete now empty test_path_router.py * Modify routing conditions: don't route on paths whose visiblity is set to false * Remove modification of geom_3d as a condition for setting pgRouting-related values to null in trigger * Fix incorrect path id test (wrong lng used) * Add checking of error messages for route_geometry unit tests * Add more detailed check of response values for route_geometry tests * Add test cases for route_geometry: draft and invisible paths, editing geom, adding / deleting paths * Add django command to generate pgRouting network topology * Add unit test for command generate_pgr_network_topology * Add entry in doc explaining how to use the generate_pgr_network_topology command * Move tests docstrings descriptions to top * Add docstrings to path_router * Adapt backend benchmark script for new PR * manage pgrouting in nstall scripts * enable pgrouting extension in debian postinst * Update benchmark system for pgRouting * fix tests and viewset permission * prevent flaky test * Update docs/install/import.rst * fix rebase * fix rebase --------- Co-authored-by: JustineFricou <[email protected]> Co-authored-by: J-E Castagnede <[email protected]> * 🐛 [BUG] Fix reset layer * 🏗 [MAINT] Remove unused dependency scipy * 🏗 [MAINT] Remove unused dependency scipy * Fix code norm * Add pgrouting to check_versions command * Add warnings to changelog * Update installation and upgrade docs for pgrouting use * Fix doc: underline too short * Fix requirements.txt after rebase * Bump pgrouting to v.3.0.0 * Use pgr_full_version for check_versions command * Refactoring routing unit tests * Correct unit tests after merge --------- Co-authored-by: Jean-Etienne Castagnede <[email protected]> Co-authored-by: JustineFricou <[email protected]> Co-authored-by: Chatewgne <[email protected]>
…mplete (test when a marker is on a path's end)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Related Issue
Checklist