def transCRS(xy, src_prj, trt_prj): ''' Re-project a 2D array of xy coordinates from one prj file to another ... Arguments --------- xy : ndarray nx2 array with coordinates to be reprojected. First column is X axis, second is Y axis src_prj : str Path to .prj file of the source Coordinate Reference System (CRS) of `xy` trt_prj : str Path to .prj file of the target Coordinate Reference System (CRS) to reproject `xy` Returns ------- xyp : ndarray nx2 array with reprojected coordinates. First column is X axis, second is Y axis ''' orig = osr.SpatialReference() orig.ImportFromWkt(open(src_prj).read()) target = osr.SpatialReference() target.ImportFromWkt(open(trt_prj).read()) trCRS = osr.CoordinateTransformation(orig, target) return np.array(trCRS.TransformPoints(xy))[:, :2]
def get_image_wkt(product): src = gdal.Open(product) ulx, xres, xskew, uly, yskew, yres = src.GetGeoTransform() max_x = ulx + (src.RasterXSize * xres) min_y = uly + (src.RasterYSize * yres) min_x = ulx max_y = uly source = osr.SpatialReference() source.ImportFromWkt(src.GetProjection()) target = osr.SpatialReference() target.ImportFromEPSG(4326) transform = osr.CoordinateTransformation(source, target) result_wkt = box( transform.TransformPoint(min_x, min_y)[0], transform.TransformPoint(min_x, min_y)[1], transform.TransformPoint(max_x, max_y)[0], transform.TransformPoint(max_x, max_y)[1]).wkt return result_wkt
def get_position(cls, raw: Reson, ds: Dataset): raw.is_mapped() lat = list() lon = list() position = raw.get_datagram(dg_type=ResonDatagrams.POSITION) times = [dg_pos.time for dg_pos in position] for dg_pos in position: if dg_pos.datum is "WGS": lat.append(dg_pos.latitude * (180 / np.pi)) lon.append(dg_pos.longitude * (180 / np.pi)) else: raise AttributeError("unrecognized datum: %s" % dg_pos.datum) grp_pos = ds.createGroup("position") grp_pos.createDimension(dimname="time", size=None) spatial_reference = osr.SpatialReference() spatial_reference.ImportFromEPSG(4326) grp_pos.spatial_ref = str(spatial_reference) var_time = grp_pos.createVariable(varname="time", datatype="f8", dimensions=("time",)) var_time[:] = times var_lat = grp_pos.createVariable(varname="latitude", datatype="f8", dimensions=("time",)) var_lat[:] = lat var_lon = grp_pos.createVariable(varname="longitude", datatype="f8", dimensions=("time",)) var_lon[:] = lon NetCDFHelper.update_modified(ds=ds) return True
def polygonize(url, date, originator): ds = gdal.Open(url) srs = osr.SpatialReference(wkt=ds.GetProjection()) band = ds.GetRasterBand(1) band_array = band.ReadAsArray() out_geojson = 'polygonized.json' driver = ogr.GetDriverByName('GeoJSON') out_data_source = driver.CreateDataSource(out_geojson + "") out_layer = out_data_source.CreateLayer('polygonized', srs=srs) new_field = ogr.FieldDefn('hot_spot', ogr.OFTInteger) out_layer.CreateField(new_field) gdal.Polygonize(band, None, out_layer, 0, [], callback=None) out_data_source = None ds = None data = json.loads(open(out_geojson).read()) gdf = gp.GeoDataFrame.from_features(data['features']) gdf = gdf[gdf['hot_spot'] == 1] gdf['date'] = date gdf['originator'] = originator gdf.crs = {'init': 'epsg:{}'.format(srs.GetAttrValue('AUTHORITY', 1))} os.remove(out_geojson) return gdf
def transCRS(db, prj_link, lat='lat', lon='lon'): ''' Re-project 'lon' and 'lat' columns from WGS84 to prj_link and put it in 'x' and 'y' columns ... Arguments --------- db : DataFrame DataFrame with coordinates to be reprojected prj_link : str Path to .prj to project lon/lat data lat : str Column name in db for lattitude lon : str Column name in db for longitude Returns ------- db : DataFrame Original DataFrame to which columns 'x' and 'y' have been added with projected coordinates ''' orig = osr.SpatialReference() orig.SetWellKnownGeogCS("WGS84") target = osr.SpatialReference() #See link for this hack #http://forum.osgearth.org/Proj4-error-No-translation-for-lambert-conformal-conic-to-PROJ-4-format-is-known-td7579032.html wkt = (open(prj_link).read()).replace('Lambert_Conformal_Conic', \ 'Lambert_Conformal_Conic_2SP') target.ImportFromWkt(wkt) #target.ImportFromWkt(open(prj_link).read()) #original trCRS = osr.CoordinateTransformation(orig, target) prjd_xys = db[['lon', 'lat']].values.tolist() prjd_xys = np.array(trCRS.TransformPoints(prjd_xys))[:, :2] db['x'] = prjd_xys[:, 0] db['y'] = prjd_xys[:, 1] return db