osm-bzh / ar_redadeg

Ressources pour le partenariat avec Ar Redadeg
0 stars 0 forks source link

phase_3_prepare.py : optimiser le pgr_createTopology #3

Open MaelREBOUX opened 2 years ago

MaelREBOUX commented 2 years ago

exemple : 99 000 tronçons sur le secteur 200 prend un peu plus de 5 min à être calculé, soit environ 340 tronçons par seconde.

On ne peut pas accélérer car on prend déjà un subset sur uniquement les tronçons du secteur. Mais l'idée est de sortir une info dans le log pour montrer que ça avance. Et pê qu'en divisant par lot pgr_createTopology évitera de tenter de faire des calculs trop large.

La façon de faire est de faire des lots basé sur un id : https://gis.stackexchange.com/questions/270780/pgr-createtopology-with-large-datasets

MaelREBOUX commented 2 years ago
  # on fait une boucle pour optimiser

  db_redadeg_cursor.execute("SELECT MIN(id), MAX(id) FROM phase_3_troncons_pgr WHERE secteur_id = "+secteur +" ;")
  min_id, max_id = db_redadeg_cursor.fetchone()
  print(f"  {max_id - min_id + 1} tronçons à traiter")

  interval = 10000
  for x in range(min_id, max_id + 1, interval):
    db_redadeg_cursor.execute(
      f"SELECT pgr_createTopology('phase_3_troncons_pgr', 0.000001, rows_where:='id>={x} and id<{x + interval}', clean := true);"
      #f"select pgr_createTopology('ways', 0.000001, 'the_geom', 'gid', rows_where:='id>={x} and id<{x + interval}');"
    )
    x_max = x + interval - 1
    if x_max > max_id:
      x_max = max_id
    print(f"  edges {x} - {x_max} have been processed")