{"id":40482414,"url":"https://github.com/sducournau/consolidate_networks","last_synced_at":"2026-01-20T18:34:04.737Z","repository":{"id":199913114,"uuid":"704097572","full_name":"sducournau/consolidate_networks","owner":"sducournau","description":"A Qgis plugin toolset for consolidate your network data","archived":false,"fork":false,"pushed_at":"2023-10-25T22:18:13.000Z","size":21610,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T17:02:51.549Z","etag":null,"topics":["geometry","network","network-analysis","qgis","qgis-plugin","qgis-processing","qgis3","qgis3-plugin"],"latest_commit_sha":null,"homepage":"https://sducournau.github.io/consolidate_networks/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sducournau.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null}},"created_at":"2023-10-12T14:28:26.000Z","updated_at":"2025-08-19T12:11:35.000Z","dependencies_parsed_at":"2023-10-23T01:24:06.192Z","dependency_job_id":"c1a460f0-3aa7-4eac-b935-741b4c07c81b","html_url":"https://github.com/sducournau/consolidate_networks","commit_stats":{"total_commits":73,"total_committers":1,"mean_commits":73.0,"dds":0.0,"last_synced_commit":"715eb08807e28c6632278e049d552e1613d43329"},"previous_names":["sducournau/consolidate_networks"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/sducournau/consolidate_networks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sducournau%2Fconsolidate_networks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sducournau%2Fconsolidate_networks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sducournau%2Fconsolidate_networks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sducournau%2Fconsolidate_networks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sducournau","download_url":"https://codeload.github.com/sducournau/consolidate_networks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sducournau%2Fconsolidate_networks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28609121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T16:10:39.856Z","status":"ssl_error","status_checked_at":"2026-01-20T16:10:39.493Z","response_time":117,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geometry","network","network-analysis","qgis","qgis-plugin","qgis-processing","qgis3","qgis3-plugin"],"created_at":"2026-01-20T18:34:04.636Z","updated_at":"2026-01-20T18:34:04.710Z","avatar_url":"https://github.com/sducournau.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![alt title logo](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/logo_white.png?raw=true) Consolidate Networks\n\n\n**Consolidate Networks is a Qgis plugin toolset that helps you optimize the geometry of your line network.**\n\u003cbr\u003e\n\n*This plugin provides processing algorithms that allow you to manipulate the vertices of a line layer.\nYou can repair topological problems and clean your data.*\n\nGithub page : https://sducournau.github.io/consolidate_networks/\n\u003cbr\u003e\nQgis plugin repository : https://plugins.qgis.org/plugins/consolidate_networks/\n\n******\n\n\u003cbr\u003e\n\n# 1. Preview\n\n![alt preview preview-1](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/comparaison_ban.png?raw=true)\n\n\n\u003cbr\u003e\n\n# 2. Models\n#### \u003cins\u003e**CN | Self-repair Pipeline model**\u003c/ins\u003e\n`Apply multiple snappings steps and make the use of cn provider algorithms.`\u003cbr\u003e\n\n\n![alt model cn.sefl-repair](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/mode_blueprint.png?raw=true)\n\n\u003cbr\u003e\n\u003cbr\u003e\n    \n******\n\n# 3. List of CN provider algorithms\n\n![alt preview cover](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/cover_50.png?raw=true)\n\n\n## DBscan and consolidate\n\n#### \u003cins\u003e**CalculateDbscan()**\u003c/ins\u003e\n`Calculate dbscan clusters of lines from a layer source.`\u003cbr\u003e\n##### Processing algorithm\u003cbr\u003e\n~~~~\ncn.calculatedbscan\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"POINTS_DBSCAN_THRESHOLD_DISTANCE\": 0.1,            # a decimal distance in meter between each point, eq to vertices density to do a dbscan\n    \"DBSCAN*\": false,                                   # consider border points as noise\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n![alt algorithm cn.calculatedbscan](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/CalculateDbscan.png?raw=true)\n\u003cbr\u003e\n\u003cbr\u003e\n    \n******\n\n#### \u003cins\u003e**ConsolidateWithDbscan()**\u003c/ins\u003e\n`Snap lines to each other splitting by their clusters from a layer source resulted from CalculateDbscan().`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.consolidatewithdbscan\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_DBSCAN\": 5.0,                               # a decimal buffer radius to snap groups between them\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n![alt algorithm cn.consolidatewithdbscan](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/CalculateDbscan2.png?raw=true)\n\u003cbr\u003e\n\u003cbr\u003e\n\n******\n\n#### \u003cins\u003e**MakeIntersectionsVertexes()**\u003c/ins\u003e\n`Insert missing vertices from a source layer.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.makeintersectionsvertexes\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n## Snapping layer (from himself)\n\n\n#### \u003cins\u003e**EndpointsStrimmingExtending()**\u003c/ins\u003e\n`Cut and extend end lines from a layer source.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.endpointstrimmingextending\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_TRIM\": 3.0,                                 # maximum segment reduction distance\n    \"BUFFER_EXTEND\": 5.0,                               # maximum segment extension distance\n    \"PREFERRED_BEHAVIOR_FOR_STARTING_EXTREMITIES\": 1,   # prefered behaviour for startings enpoints : 'Trim','Extend','None'\n    \"PREFERRED_BEHAVIOR_FOR_ENDING_EXTREMITIES\": 0,     # prefered behaviour for endings enpoints : 'Trim','Extend','None'\n    \"HAUSDORFF_DISTANCE_LIMIT\": 5.0,                    # hausdorff distance limit to avoid calculations between geometries too similar\n    \"ANGULAR_LIMIT_OF_PARALLEL_GEOMETRIES\": 15.0,       # angular limit difference between two geometries\n    \"EXPLODE_AND_GATHER\": false,                        # decomposes each entity into segments composed of two points at the start of processing, then brings them together at the end of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n![alt algorithm cn.endpointstrimmingextending](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/EndpointsStrimmingExtending.png?raw=true)\n\u003cbr\u003e\n\u003cbr\u003e\n  \n******\n\n#### \u003cins\u003e**EndpointsSnapping()**\u003c/ins\u003e\n`Snap lines endpoints' to each other's from a layer source.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~LIST OF CN PROVIDER ALGORITHMSModels\ncn.endpointssnapping\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_ENDPOINTS_SNAPPING\": 5.0,                   # maximum snapping distance\n    \"PREFERRED_BEHAVIOR_FOR_STARTING_EXTREMITIES\": 1,   # prefered behaviour for startings enpoints : \n                                                        # 'Nearest, Minimum angular variation','Farest, Minimum angular variation',\n                                                        # 'Nearest, Maximum angular variation','Farest, Maximum angular variation'\n    \"PREFERRED_BEHAVIOR_FOR_ENDING_EXTREMITIES\": 0,     # prefered behaviour for endings enpoints :\n                                                        # 'Nearest, Minimum angular variation','Farest, Minimum angular variation',\n                                                        # 'Nearest, Maximum angular variation','Farest, Maximum angular variation'\n    \"HAUSDORFF_DISTANCE_LIMIT\": 5.0,                    # hausdorff distance limit to avoid calculations between geometries too similar\n    \"MIN_ANGULAR_LIMIT_OF_PARALLEL_GEOMETRIES\": 0.0,    # minimum angular limit difference between two geometries\n    \"MAX_ANGULAR_LIMIT_OF_PARALLEL_GEOMETRIES\": 180.0,  # mximum angular limit difference between two geometries\n    \"PREFERS_SAME_GEOMETRY_DIRECTION\": true,            # favors entities whose geometry has the same direction\n    \"EXPLODE_AND_GATHER\": false,                        # decomposes each entity into segments composed of two points at the start of processing, then brings them together at the end of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n![alt algorithm cn.endpointssnapping](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/EndpointsSnapping.png?raw=true)\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n******\n\n#### \u003cins\u003e**HubSnapping()**\u003c/ins\u003e\n`Align lines vertices' hubs on top of each other within a buffer.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.hubsnapping\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_HUB_SNAPPING\": 1.5,                         # maximum hub distance between entities\n    \"HUBPOINT_MUST_BE_AN_EXISTING_VERTEX\": true,        # the hub snap point is the closest vertex to the barycenter of the resulting polygon, otherwise it is the barycenter\n    \"EXPLODE_AND_GATHER\": false,                        # decomposes each entity into segments composed of two points at the start of processing, then brings them together at the end of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n![alt algorithm cn.hubsnapping](https://raw.githubusercontent.com/sducournau/consolidate_networks/main/ressources/HubSnapping.png?raw=true)\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n\n\n## Snapping layer (from another layer)\n\n\n#### \u003cins\u003e**SnapEndpointsToLayer()**\u003c/ins\u003e\n`Snap lines endpoints' to each other's from an other layer source.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.snapendpointstoLayer\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"REF_INPUT\": QgsVectorLayer,                        # reference vector layer source (TypeVectorLine, TypeVectorPoint)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_ENDPOINTS_SNAPPING\": 5.0,                   # maximum snapping distance\n    \"PREFERRED_BEHAVIOR_FOR_STARTING_EXTREMITIES\": 1,   # prefered behaviour for startings enpoints : \n                                                        # 'Nearest, Minimum angular variation','Farest, Minimum angular variation',\n                                                        # 'Nearest, Maximum angular variation','Farest, Maximum angular variation'\n    \"PREFERRED_BEHAVIOR_FOR_ENDING_EXTREMITIES\": 0,     # prefered behaviour for endings enpoints :\n                                                        # 'Nearest, Minimum angular variation','Farest, Minimum angular variation',\n                                                        # 'Nearest, Maximum angular variation','Farest, Maximum angular variation'\n    \"HAUSDORFF_DISTANCE_LIMIT\": 5.0,                    # hausdorff distance limit to avoid calculations between geometries too similar\n    \"MIN_ANGULAR_LIMIT_OF_PARALLEL_GEOMETRIES\": 0.0,    # minimum angular limit difference between two geometries\n    \"MAX_ANGULAR_LIMIT_OF_PARALLEL_GEOMETRIES\": 180.0,  # mximum angular limit difference between two geometries\n    \"PREFERS_SAME_GEOMETRY_DIRECTION\": true,            # favors entities whose geometry has the same direction\n    \"EXPLODE_AND_GATHER\": false,                        # decomposes each entity into segments composed of two points at the start of processing, then brings them together at the end of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n\u003cbr\u003e\n\u003cbr\u003e\n\n******\n\n\n#### \u003cins\u003e**SnapHubsPointsToLayer()**\u003c/ins\u003e\n`Align lines vertices' hubs on top of a point layer within a buffer.`\u003cbr\u003e\n##### Processing algorithm :\u003cbr\u003e\n~~~~\ncn.snaphubspointstolayer\n~~~~\n##### Paramètres\u003cbr\u003e\n~~~~\n{\n    \"INPUT\": QgsVectorLayer,                            # vector layer source (TypeVectorLine)\n    \"REF_INPUT\": QgsVectorLayer,                        # reference vector layer source (TypeVectorLine, TypeVectorPoint)\n    \"FIX_GEOMETRIES_BEFORE_PROCESSING\": true,           # repairs the input layer geometries at the start of processing\n    \"BUFFER_HUB_SNAPPING\": 1.5,                         # maximum hub distance between entities\n    \"HUBPOINT_MUST_BE_AN_EXISTING_VERTEX\": true,        # the hub snap point is the closest vertex to the barycenter of the resulting polygon, otherwise it is the barycenter\n    \"EXPLODE_AND_GATHER\": false,                        # decomposes each entity into segments composed of two points at the start of processing, then brings them together at the end of processing\n    \"ENTITY_IDENTIFICATION_FIELDS\": [],                 # vector layer source fields to brings decomposed entities together, by default all fields are selected\n    \"PRINT_DEBUG\": false,                               # activates debug mode (print readable in the console)\n    \"OUTPUT\": \"TEMPORARY_OUTPUT\"                        # vector layer computed (TypeVectorLine)\n}\n~~~~\n\u003cbr\u003e\n\u003cbr\u003e  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsducournau%2Fconsolidate_networks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsducournau%2Fconsolidate_networks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsducournau%2Fconsolidate_networks/lists"}