icra / QGISprocessing

buildings2sewer is a QGIS processing plugin that connects the buildings of a city to their nearest lower manhole (or any other geometries). It incorporates two parameters that work together: maximum distance and z tolerance. If a connection is larger than maximum distance, the manholes 1 metres higher than the building are also considered. This iteration is repeated until "z tolerance" is reached.
0 stars 0 forks source link

L'algoritme ja retorna una capa de nodes i una d'arcs generada a partir del subgraph #2

Open jospueyo opened 1 year ago

jospueyo commented 1 year ago

@SBergillos @RubenOncala

Amb els últims canvis que he pujat, l'algoritme ja converteix el subgraph a capes espacials de nou i les retorna a QGIS. Deixo aquí escrit el procés:

  1. Obtinc les ids de nodes i de arcs del subgraph.
  2. Utilitzo les ids per filtrar la capa original de nodes i arcs amb els nodes i arcs del subgraph.
  3. Miro quins camps estan modificats. Per poder fer això, cal que cada vegada que s'actualitzi un atribut d'un node o un arc s'utilitzi la funció update_changed_field per actualitzar el camp 'changed' que llavors el consulto per saber quins camps actualitzar. De moment només està implementada pels nodes, necessiteu modificar atributs dels arcs també?
  4. Actualitzo els camps i copio el node o arc des de la capa original cap a la capa resultat.

És la manera més eficient que se m'ha ocorregut, l'alternativa seria crear un cap de text definint la geometria i carregar-lo com a atribut als nodes i arcs del graph (és el que fa geopandas, de fet), però fas que el graph ocupi molta més memòria i per tant sigui més lent treballar-hi.

Executar l'algoritme

A dins de la carpeta sandbox, trobareu un petit script que es diu run_fixTheNetwork.py que si l'obriu des de la consola de python del QGIS executar l'algoritme sense haver d'utilitzar l'interfície gràfica. Agilitza bastant el procés de prova i error. Caldria que carregueu el MDE que utilitzeu a dins de la carpeta datasets quan volguem comnçar a utilitzar-lo.

En parlem divendres.