geotools.py 683 bytes
from osgeo import gdal
from osgeo import ogr
from pyproj import Transformer as T

def get_query_bbox(shp, query_srs=4326, return_all=False):
    ds = ogr.Open(shp)
    ly = ds.GetLayer(0)
    xt = ly.GetExtent()
    shp_srs = int(ly.GetSpatialRef().GetAuthorityCode(None))

    i_bbox = [xt[0], xt[2], xt[1], xt[3]]
    if shp_srs == query_srs:
        bbox = i_bbox
    else:
        tr = T.from_crs(shp_srs, query_srs, always_xy=True)
        lon_min, lat_min = tr.transform(xt[0], xt[2])
        lon_max, lat_max = tr.transform(xt[1], xt[3])
        bbox = [lon_min, lat_min, lon_max, lat_max]

    if return_all:
        return bbox, i_bbox, shp_srs
    else:
        return bbox