예제 #1
0
파일: mapping.py 프로젝트: jomerson/pysal
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]
예제 #2
0
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
예제 #3
0
    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
예제 #4
0
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
예제 #5
0
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