Comment calculer la distance d'une entité avec gdal_proximity?


28

J'utilise gdal_proximity pour trouver la distance par rapport à la rivière principale la plus proche des États-Unis (48 États inférieurs). J'ai projeté les lignes de flux du réseau NHD + vers Conus Albers (epsg: 5070), des rivières sélectionnées avec un ordre de flux> 5, et tramées, brûlant des rivières à 255, aucune rivière à 0. C'est très bien, mais maintenant je dois trouver la distance à la rivière la plus proche pour les sites à moins de 50 km. Le fichier d'entrée est à une résolution de 30 m à l'échelle continentale, il est donc très volumineux, mais la conversion doit être une simple commande gdal_proximity:

gdal_proximity.bat -values 255 -distunits GEO -maxdist 50000 -nodata -999 infile.tif outfile.tif -co COMPRESS=DEFLATE -co BIGTIFF=YES -co TILED=YES

Cela semble fonctionner presque, mais produit un motif géométrique étrange dans la sortie (voir l'image). Les données présentes dans la sortie ont été traitées correctement. Quelqu'un peut-il suggérer pourquoi une grande partie de la sortie est manquante?

Proximité de la rivière

Edit: Pour tester si cela a été causé par l'un des paramètres facultatifs, j'ai à nouveau exécuté gdal_proximity dans cette configuration:

gdal_proximity.bat H:\data\tmp\NHDplus_network_flowline_SO6plus.tif H:/data/tmp/NHDplus_network_flowline_SO6plus_proximity.tif -values 255 -maxdist 50000 -of GTiff

Ce qui a donné essentiellement le même résultat:

Proximité de la rivière, pas de paramètres optionnels

Ma seule pensée est que cela peut être lié à la taille du raster (~ 100 Go non compressé. Pour autant que je sache, il n'y a pas de limite à la taille d'un BigTiff, mais il y a peut-être une limite à ce que gdal peut analyser efficacement?


1
que se passe-t-il si vous désactivez tuile = OUI? En outre, cela fonctionne-t-il si vous passez de GEO à PIXEL? (La sortie pourrait ne pas convenir, mais cela pourrait réduire le problème)
Steven Kay

Merci pour la suggestion - avez ajouté une réponse à la question d'origine.
R Rhodes

À quelle résolution votre infile.tif?
shahryar

2
Pouvez-vous essayer de lire les données en utilisant GDAL par lots (lignes) et voir si le problème est que les données elles-mêmes ou QGIS ne sont pas en mesure de les visualiser? Une première étape pour trouver ce problème consiste à réduire l'étendue spatiale à un échantillon AOI.
RutgerH

Réponses:


3

Je soupçonne que vous atteignez une limite de mémoire quelque part, peut-être lorsque la RAM est épuisée et que le système d'exploitation se décharge dans un fichier d'échange. Surveillez vos ressources système pendant le processus. Je ne comprends pas pourquoi vos résultats se produisent dans des andains courbes, mais assurez-vous d'avoir projeté (enregistré) toutes les données dans le même système de coordonnées.

Jetons un coup d'œil aux types de données numériques afin d'aider cet algorithme. Le réseau de flux rasterisé ne doit contenir que des valeurs binaires, nous pouvons donc économiser sur les ressources en utilisant un Bytetype de données raster. Gravez une valeur de 1 pour les flux et de 0 pour l'arrière-plan:

gdal_rasterize -l streams -burn 1 -tr 50 50 -a_nodata 0 -te -2339101 311625 2227004 3134200 -ot Byte -of GTiff streams.shp streams.tif

Ensuite, la proximité qui nous intéresse est positive et inférieure ou égale à 50 000 m. Un type de données approprié est un entier 16 bits non signé UInt16. De plus, si nous définissons «aucune donnée» au maximum 65535, nous pouvons conserver une valeur 0 pour les cellules de flux.

Si nécessaire, vous pouvez également passer à un entier non signé 8 bits UInt8et avoir toujours une précision de proximité de ~ 200 m.

gdal_proximity.bat -srcband 1 -distunits GEO -values 1 -maxdist 50000 -nodata 65535 -ot UInt16 -of GTiff streams.tif proximity.tif

* Notez que j'ai utilisé une taille de cellule de 50 m. La gdal_proximity a consommé environ 20 Go de RAM et a pris environ 5 minutes sur ma machine. Si vous êtes limité en RAM, divisez le raster en entrée en tailles gérables, comme d'autres l'ont noté.

résultats gdal_proximity

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.