Programmatic gdal_proximity call

pull/1464/head
Piero Toffanin 2022-05-31 10:50:50 -04:00
rodzic 275f719024
commit 49d0906ce5
1 zmienionych plików z 22 dodań i 6 usunięć

Wyświetl plik

@ -23,6 +23,16 @@ import threading
from .ground_rectification.rectify import run_rectification
from . import pdal
try:
# GDAL >= 3.3
from osgeo_utils.gdal_proximity import main as gdal_proximity
except ModuleNotFoundError:
# GDAL <= 3.2
try:
from osgeo.utils.gdal_proximity import main as gdal_proximity
except:
pass
def classify(lasFile, scalar, slope, threshold, window, verbose=False):
start = datetime.now()
@ -290,14 +300,20 @@ def compute_euclidean_map(geotiff_path, output_path, overwrite=False):
if not os.path.exists(output_path) or overwrite:
log.ODM_INFO("Computing euclidean distance: %s" % output_path)
gdal_proximity_path = shutil.which("gdal_proximity.py")
gdal_proximity_cmd = '"%s" "%s"' % (sys.executable, gdal_proximity_path) if gdal_proximity_path is not None else "gdal_proximity.py"
run('%s "%s" "%s" -values %s' % (gdal_proximity_cmd, geotiff_path, output_path, nodata))
if os.path.exists(output_path):
return output_path
if gdal_proximity is not None:
try:
gdal_proximity(['gdal_proximity.py', geotiff_path, output_path, '-values', str(nodata)])
except Exception as e:
log.ODM_WARNING("Cannot compute euclidean distance: %s" % str(e))
if os.path.exists(output_path):
return output_path
else:
log.ODM_WARNING("Cannot compute euclidean distance file: %s" % output_path)
else:
log.ODM_WARNING("Cannot compute euclidean distance file: %s" % output_path)
log.ODM_WARNING("Cannot compute euclidean map, gdal_proximity is missing")
else:
log.ODM_INFO("Found a euclidean distance map: %s" % output_path)
return output_path