def read_SRTM(fh): """ Read the array of (y, x) elevation data from the given named file-handle. Parameters ========== fh : file-handle like A named file-like as passed through to :func:`cartopy.io.fh_getter`. The filename is used to determine the extent of the resulting array. Returns ======= elevation : numpy array The elevation values from the SRTM file. Data is flipped vertically such that the higher the y-index, the further north the data. Data shape is automatically determined by the size of data read from file, and is either (1201, 1201) for 3 arc-second data or (3601, 3601) for 1 arc-second data. crs : :class:`cartopy.crs.CRS` The coordinate reference system of the extents. extents : 4-tuple (x0, x1, y0, y1) The boundaries of the returned elevation array. """ fh, fname = fh_getter(fh, needs_filename=True) if fname.endswith('.zip'): from zipfile import ZipFile zfh = ZipFile(fh, 'rb') fh = zfh.open(os.path.basename(fname[:-4]), 'r') elev = np.fromfile(fh, dtype=np.dtype('>i2')) if elev.size == 12967201: elev.shape = (3601, 3601) elif elev.size == 1442401: elev.shape = (1201, 1201) else: raise ValueError( 'Shape of SRTM data ({}) is unexpected.'.format(elev.size)) fname = os.path.basename(fname) y_dir, y, x_dir, x = fname[0], int(fname[1:3]), fname[3], int(fname[4:7]) if y_dir == 'S': y *= -1 if x_dir == 'W': x *= -1 return elev[::-1, ...], ccrs.PlateCarree(), (x, x + 1, y, y + 1)
def read_SRTM(fh): """ Read the array of (y, x) elevation data from the given named file-handle. Parameters ---------- fh A named file-like as passed through to :func:`cartopy.io.fh_getter`. The filename is used to determine the extent of the resulting array. Returns ------- elevation The elevation values from the SRTM file. Data is flipped vertically such that the higher the y-index, the further north the data. Data shape is automatically determined by the size of data read from file, and is either (1201, 1201) for 3 arc-second data or (3601, 3601) for 1 arc-second data. crs: :class:`cartopy.crs.CRS` The coordinate reference system of the extents. extents: 4-tuple (x0, x1, y0, y1) The boundaries of the returned elevation array. """ fh, fname = fh_getter(fh, needs_filename=True) if fname.endswith('.zip'): from zipfile import ZipFile zfh = ZipFile(fh, 'rb') fh = zfh.open(os.path.basename(fname[:-4]), 'r') elev = np.fromfile(fh, dtype=np.dtype('>i2')) if elev.size == 12967201: elev.shape = (3601, 3601) elif elev.size == 1442401: elev.shape = (1201, 1201) else: raise ValueError('Shape of SRTM data ({}) is unexpected.'.format( elev.size)) fname = os.path.basename(fname) y_dir, y, x_dir, x = fname[0], int(fname[1:3]), fname[3], int(fname[4:7]) if y_dir == 'S': y *= -1 if x_dir == 'W': x *= -1 return elev[::-1, ...], ccrs.PlateCarree(), (x, x + 1, y, y + 1)
def read_SRTM3(fh): """ Read the (1201, 1201) array of (y, x) elevation data from the given named file-handle. Parameters ========== fh : file-handle like A named file-like as passed through to :func:`cartopy.io.fh_getter`. The filename is used to determine the extent of the resulting array. Returns ======= elevation : numpy array The elevation values from the SRTM file. Data is flipped vertically such that the higher the the y-index, the further north the data. crs : :class:`cartopy.crs.CRS` The coordinate reference system of the extents. extents : 4-tuple (x0, x1, y0, y1) The boundaries of the returned elevation array. """ fh, fname = fh_getter(fh, needs_filename=True) if fname.endswith('.zip'): from zipfile import ZipFile zfh = ZipFile(fh, 'rb') fh = zfh.open(os.path.basename(fname[:-4]), 'r') elev = np.fromfile(fh, dtype=np.dtype('>i2')) elev.shape = (1201, 1201) fname = os.path.basename(fname) y_dir, y, x_dir, x = fname[0], int(fname[1:3]), fname[3], int(fname[4:7]) if y_dir == 'S': y *= -1 if x_dir == 'W': x *= -1 return elev[::-1, ...], ccrs.PlateCarree(), (x, x + 1, y, y + 1)
def read_SRTM3(fh): fh, fname = fh_getter(fh, needs_filename=True) if fname.endswith('.zip'): from zipfile import ZipFile zfh = ZipFile(fh, 'rb') fh = zfh.open(os.path.basename(fname[:-4]), 'r') elev = np.fromfile(fh, dtype=np.dtype('>i2')) elev.shape = (1201, 1201) fname = os.path.basename(fname) y_dir, y, x_dir, x = fname[0], int(fname[1:3]), fname[3], int(fname[4:7]) if y_dir == 'S': y *= -1 if x_dir == 'W': x *= -1 # xxx extent may need to be wider by half a pixel return elev[::-1, ...], ccrs.PlateCarree(), [x, x + 1, y, y + 1]
def read_SRTM3(fh): fh, fname = fh_getter(fh, needs_filename=True) if fname.endswith('.zip'): from zipfile import ZipFile zfh = ZipFile(fh, 'r') fh = zfh.open(os.path.basename(fname[:-4]), 'r') elev = numpy.fromfile(fh, dtype=numpy.dtype('>i2')) elev.shape = (1201, 1201) fname = os.path.basename(fname) y_dir, y, x_dir, x = fname[0], int(fname[1:3]), fname[3], int(fname[4:7]) if y_dir == 'S': y *= -1 if x_dir == 'W': x *= -1 # xxx extent may need to be wider by half a pixel return elev[::-1, ...], ccrs.PlateCarree(), [x, x + 1, y, y + 1]