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?
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:
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?
la source
Réponses:
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
Byte
type de données raster. Gravez une valeur de 1 pour les flux et de 0 pour l'arrière-plan: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
UInt8
et avoir toujours une précision de proximité de ~ 200 m.* 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é.
la source