Package: geotiff
geotiffA noGDAL tool for reading geotiff filesWarningThis package is under development and some features are unstable. Proceed with caution.Please support this project be giving it astar on GitHub!What is noGDAL?noGDALis a philosophy for developing geospatial programs in Python without using GDAL.InstallationInstalling this package is as easy as:pip install geotiffThere is also an Anaconda-based package available, published onconda-forge:conda install -c conda-forge python-geotiffFor local development from sources, you can install geotiff with its development requirements using:git clone git@github.com:KipCrossing/geotiff.git
cd geotiff
pip install -e .[dev]UsageMaking the GeoTiff objectfromgeotiffimportGeoTifftiff_file="path/to/tiff/file"geo_tiff=GeoTiff(tiff_file)This will detect the crs code. If it's 'user defined' and you know what it should be, you may supply a crs code:geo_tiff=GeoTiff(tiff_file,crs_code=4326)By default, the coordinates will be in WGS 84, however they can be specified by using theas_crsparam:geo_tiff=GeoTiff(tiff_file,as_crs=7844)Or you can use the original crs by settingas_crstoNone:geo_tiff=GeoTiff(tiff_file,as_crs=None)If the geotiff file has multiple bands, you can specify which band to use:geo_tiff=GeoTiff(tiff_file,band=1)The default band is 0Get information (properties) about the geotiff:# the original crs codegeo_tiff.crs_code# the current crs codegeo_tiff.as_crs# the shape of the tiffgeo_tiff.tif_shape# the bounding box in the as_crs CRSgeo_tiff.tif_bBox# the bounding box as WGS 84geo_tiff.tif_bBox_wgs_84# the bounding box in the as_crs converted coordinatesgeo_tiff.tif_bBox_convertedGet coordinates of a point/pixel:i=5j=6# in the as_crs coordsgeo_tiff.get_coords(i,j)# in WGS 84 coordsgeo_tiff.get_wgs_84_coords(i,j)Read the dataTo read the data, use the.read()method. This will return aZarrarray as often geotiff files cannot fit into memory.zarr_array=geo_tiff.read()If you are confident that the data will fit into memory, you can convert it to a numpy array:importnumpyasnparray=np.array(zarr_array)Read a section of a large tiffIn many cases, you are only interested in a section of the tiff. For convenience, you can use the.read_box()method. This will return a numpy array.WarningThis will fail if the box you are using is too large and the data cannot fit into memory.fromgeotiffimportGeoTiff# in WGS 84area_box=[(138.632071411,-32.447310785),(138.644218874,-32.456979174)]geo_tiff=GeoTiff(tiff_file)array=geo_tiff.read_box(area_box)NoteFor thearea_box, use the same crs asas_crs.In some cases, you may want some extra points/pixels around the outside of yourarea_box. This may be useful if you want to interpolate to points near the area_box boundary. To achieve this, use theouter_pointsparam:array = geo_tiff.read_box(area_box, outer_points=2)This will get 2 extra perimeters of points around the outside of the thearea_box.Getting bounding box informationThere are also some helper methods to get the bounding box of the resulting cut array:# col and row indexes of the cut areaint_box=geo_tiff.get_int_box(area_box)# lon and lat coords of the cut points/pixelswgs_84_box=geo_tiff.get_bBox_wgs_84(area_box)Again, you can also get bounding box for an extra n layers of points/pixels that directly surround thearea_box:# col and row indexes of the cut areaint_box=geo_tiff.get_int_box(area_box,outer_points=2)# lon and lat coords of the cut points/pixelswgs_84_box=geo_tiff.get_bBox_wgs_84(area_box,outer_points=2)Get coordinates of a point/pixelYou may want to get the coordinates of a value in your array:i=int_box[0][0]+5j=int_box[0][1]+6geo_tiff.get_wgs_84_coords(i,j)Get coordinates of an arrayYou may want to simply get all the coordinates in the array:array=geo_tiff.read_box(area_box,outer_points=2)lon_array,lat_array=geo_tiff.get_coord_arrays(area_box,outer_points=2)This will return two arrays that are in the same shape as the array from theread_box()method. The output coords will be in theas_crscrs.If your tiff file is small and can fit into memory, simply:lon_array,lat_array=geo_tiff.get_coord_arrays()ContributingIf you would like to contribute to this project, please fork this repo and make a PR with your patches.You can join the conversation by saying "hi" in theproject discussion board.To help users and other contributes, be sure to:Make docstrings and documentation blocks, if appropriateUse Python typing wherever possibleFormat your code withBlackNoteThe continuous integration has lint checking withmypy, so be sure to check it yourself before making a PR.Project Road MapCore Featuresread tiff files (including BigTiff)write tiff files (including BigTiff)convert between epsg coordinate systemsread a user defined CRS32767from tiff filecut a section (bounding box) of the tiff fileconvert the data to numpy arraysAdditional features(50%)Full test coverageTyping with lint checking using mypyFormatted with blackDocumentation: doc blocsDocumentation: readthedocs