Suite

Comment créer des segments de ligne entre des paires de pixels dans un raster ?

Comment créer des segments de ligne entre des paires de pixels dans un raster ?


Je souhaite tracer plusieurs lignes entre les pixels (voir l'image ci-dessous) selon certains critères :

  • Premier critère: La distance entre 2 pixels est inférieure à 2000m et supérieure à 500m

  • Deuxième critère: La différence absolue des valeurs Z est inférieure à 600 m et supérieure à 400 m

Par exemple, considérons deux pixels d'un DEM : je veux tracer une ligne entre leurs centroïdes s'ils satisfont aux deux critères.

J'ai testé en convertissant mon DEM raster en points et en appliquant ces critères mais cela prend beaucoup de temps. Avez-vous une proposition ou des suggestions? J'utilise GRASS, Postgis ou Python


Vous pouvez potentiellement convertir l'objet DEM en un tableau Numpy et faire vos tests là-dessus. Par exemple, trier par différence de hauteur.

Malheureusement, la distance entre chaque pixel à un autre pixel est quelque chose que vous devez faire beaucoup de fois, et en tant que tel, vous ne pouvez vraiment rien faire pour réduire le nombre de tests, à part faire quelques règles basées sur la différence dans le indices entre les cellules.

Cela dit, qu'en est-il de ceci (en pseudo code) :

  1. Obtenez votre raster sous forme de tableau
  2. Pour chaque ROW et COL (c'est votre source)
  3. L'un pour l'autre ROW et COL (c'est votre destination)
  4. Ignorer la destination si c'est cette cellule
  5. Ignorez la destination si l'index est éloigné de plus de nMinX en lignes (trouvez-le en obtenant votre 500 m / largeur de cellule) et inférieur à nMaxX
  6. Ignorer la destination si l'index est à plus de nMinY en cols (similaire à 5.) et nMaxY
  7. facultatif, mais élaborez un test d'ignorance en diagonale si vous en avez besoin ?
  8. Vérifiez que cette cellule est dans la contrainte de hauteur, et si c'est le cas, vérifiez la contrainte de distance.
  9. Si les chèques en 8 passes, créez votre ligne et avancez.
  10. Vous voudrez peut-être stocker la ligne en tant qu'index de cellule et ignorer également la ligne de retour de la cellule de destination (sinon, vous aurez une ligne de/à et à/de pour chaque paire.

Je pense que faire cela en Python sera assez simple.


Veuillez jeter un œil à l'extension r.connectivity.distance GRASS 6 pour vous inspirer.

Cela fait quelque chose de similaire à ce que vous recherchez…


Voir la vidéo: Resampling Raster ArcGis. changing the cell size of Raster dataset in ArcGis