|
18 | 18 | import pathlib
|
19 | 19 | from warnings import warn
|
20 | 20 | import numpy as np
|
21 |
| -import pandas as pd |
22 | 21 | from scipy.interpolate import RegularGridInterpolator
|
23 | 22 |
|
24 | 23 | # check existence of gdal
|
@@ -343,39 +342,33 @@ def read_ascii_data(fname, fill_value=None):
|
343 | 342 |
|
344 | 343 | # read the data
|
345 | 344 | try:
|
346 |
| - asciidata = pd.read_csv(fname, header=None) |
347 |
| - |
348 |
| - metadata = {} |
349 |
| - metadata["columns"] = int(asciidata.iloc[0][0].split(" ")[1]) |
350 |
| - metadata["rows"] = int(asciidata.iloc[1][0].split(" ")[1]) |
351 |
| - metadata["min. X"] = float(asciidata.iloc[2][0].split(" ")[1]) |
352 |
| - metadata["min. Y"] = float(asciidata.iloc[3][0].split(" ")[1]) |
353 |
| - metadata["resolution"] = float(asciidata.iloc[4][0].split(" ")[1]) |
354 |
| - metadata["flag value"] = float(asciidata.iloc[5][0].split(" ")[1]) |
355 |
| - metadata["max. X"] = ( |
356 |
| - metadata["min. X"] + metadata["resolution"] * metadata["columns"] |
357 |
| - ) |
358 |
| - metadata["max. Y"] = ( |
359 |
| - metadata["min. Y"] + metadata["resolution"] * metadata["rows"] |
360 |
| - ) |
361 |
| - metadata["value units"] = "m" |
| 345 | + with open(fname, "r") as file: |
| 346 | + lines = [file.readline().strip().split() for _ in range(6)] |
| 347 | + |
| 348 | + # Parse metadata |
| 349 | + metadata = { |
| 350 | + "columns": int(lines[0][1]), |
| 351 | + "rows": int(lines[1][1]), |
| 352 | + "min. X": float(lines[2][1]), |
| 353 | + "min. Y": float(lines[3][1]), |
| 354 | + "resolution": float(lines[4][1]), |
| 355 | + "flag value": float(lines[5][1]), |
| 356 | + "max. X": float(lines[2][1]) + float(lines[4][1]) * int(lines[0][1]), |
| 357 | + "max. Y": float(lines[3][1]) + float(lines[4][1]) * int(lines[1][1]), |
| 358 | + "value units": "m", |
| 359 | + } |
362 | 360 |
|
363 |
| - if not fill_value: |
| 361 | + # Set fill value if not provided |
| 362 | + if fill_value is None: |
364 | 363 | fill_value = metadata["flag value"]
|
365 | 364 |
|
366 |
| - raster_array = pd.read_csv(fname, skiprows=6, header=None, sep=" ") |
367 |
| - raster_array = np.array(raster_array) |
368 |
| - raster_array = raster_array[np.isfinite(raster_array)] |
369 |
| - raster_array = np.reshape(raster_array, (metadata["rows"], metadata["columns"])) |
370 |
| - raster_array = np.ma.masked_equal(raster_array, fill_value) |
| 365 | + # Read raster data, skipping first 6 lines |
| 366 | + raster_array = np.loadtxt(fname, skiprows=6) |
371 | 367 |
|
372 |
| - rasterarray = pd.read_csv(fname, skiprows=6, header=None, sep=" ") |
373 |
| - rasterarray = np.array(rasterarray) |
374 |
| - rasterarray = rasterarray[np.isfinite(rasterarray)] |
375 |
| - rasterarray = np.reshape(rasterarray, (metadata["rows"], metadata["columns"])) |
376 |
| - rasterarray = np.ma.masked_equal(rasterarray, fill_value) |
| 368 | + # Mask NODATA values |
| 369 | + raster_array = np.ma.masked_equal(raster_array, fill_value) |
377 | 370 |
|
378 |
| - dem = {"metadata": metadata, "data": rasterarray} |
| 371 | + dem = {"metadata": metadata, "data": raster_array} |
379 | 372 |
|
380 | 373 | return dem
|
381 | 374 |
|
|
0 commit comments