def evaluateLineStringPlane(geom, label='Airplane'): ring = ogr.Geometry(ogr.wkbLinearRing) for i in range(0, geom.GetPointCount()): # GetPoint returns a tuple not a Geometry pt = geom.GetPoint(i) ring.AddPoint(pt[0], pt[1]) pt = geom.GetPoint(0) ring.AddPoint(pt[0], pt[1]) poly = ogr.Geometry(ogr.wkbPolygon) poly.AddGeometry(ring) transform_WGS84_To_UTM, transform_UTM_To_WGS84, utm_cs = gT.createUTMTransform( geom) geom.Transform(transform_WGS84_To_UTM) pt0 = geom.GetPoint(0) # Tail pt1 = geom.GetPoint(1) # Wing pt2 = geom.GetPoint(2) # Nose pt3 = geom.GetPoint(3) # Wing Length = math.sqrt((pt2[0] - pt0[0])**2 + (pt2[1] - pt0[1])**2) Width = math.sqrt((pt3[0] - pt1[0])**2 + (pt3[1] - pt1[1])**2) Aspect = Length / Width Direction = (math.atan2(pt2[0] - pt0[0], pt2[1] - pt0[1]) * 180 / math.pi) % 360 geom.Transform(transform_UTM_To_WGS84) return [poly, Length, Width, Aspect, Direction]
def evaluateLineStringPlane(geom, label='Airplane'): ring = ogr.Geometry(ogr.wkbLinearRing) for i in range(0, geom.GetPointCount()): # GetPoint returns a tuple not a Geometry pt = geom.GetPoint(i) ring.AddPoint(pt[0], pt[1]) pt = geom.GetPoint(0) ring.AddPoint(pt[0], pt[1]) poly = ogr.Geometry(ogr.wkbPolygon) poly.AddGeometry(ring) transform_WGS84_To_UTM, transform_UTM_To_WGS84, utm_cs = gT.createUTMTransform(geom) geom.Transform(transform_WGS84_To_UTM) pt0 = geom.GetPoint(0) # Tail pt1 = geom.GetPoint(1) # Wing pt2 = geom.GetPoint(2) # Nose pt3 = geom.GetPoint(3) # Wing Length = math.sqrt((pt2[0]-pt0[0])**2 + (pt2[1]-pt0[1])**2) Width = math.sqrt((pt3[0] - pt1[0])**2 + (pt3[1] - pt1[1])**2) Aspect = Length/Width Direction = (math.atan2(pt2[0]-pt0[0], pt2[1]-pt0[1])*180/math.pi) % 360 geom.Transform(transform_UTM_To_WGS84) return [poly, Length, Width, Aspect, Direction]
def evaluateLineStringBoat(geom, label='Boat', aspectRatio=3): transform_WGS84_To_UTM, transform_UTM_To_WGS84, utm_cs = gT.createUTMTransform(geom) geom.Transform(transform_WGS84_To_UTM) pt0 = geom.GetPoint(0) # Stern pt1 = geom.GetPoint(1) # Bow Length = math.sqrt((pt1[0]-pt0[0])**2 + (pt1[1]-pt0[1])**2) Direction = (math.atan2(pt1[0]-pt0[0], pt1[1]-pt0[1])*180/math.pi) % 360 geom.Transform(transform_UTM_To_WGS84) poly, areaM, angRad, lengthM = gT.createBoxFromLine(geom, aspectRatio, transformRequired=True, transform_WGS84_To_UTM=transform_WGS84_To_UTM, transform_UTM_To_WGS84=transform_UTM_To_WGS84) Width = Length/aspectRatio Aspect = aspectRatio return [poly, Length, Width, Aspect, Direction]
def createDistanceTransform(rasterSrc, vectorSrc, npDistFileName='', units='pixels'): ## open source vector file that truth data source_ds = ogr.Open(vectorSrc) source_layer = source_ds.GetLayer() ## extract data from src Raster File to be emulated ## open raster file that is to be emulated srcRas_ds = gdal.Open(rasterSrc) cols = srcRas_ds.RasterXSize rows = srcRas_ds.RasterYSize noDataValue = 0 if units == 'meters': geoTrans, poly, ulX, ulY, lrX, lrY = gT.getRasterExtent(srcRas_ds) transform_WGS84_To_UTM, transform_UTM_To_WGS84, utm_cs = gT.createUTMTransform( poly) line = ogr.Geometry(ogr.wkbLineString) line.AddPoint(geoTrans[0], geoTrans[3]) line.AddPoint(geoTrans[0] + geoTrans[1], geoTrans[3]) line.Transform(transform_WGS84_To_UTM) metersIndex = line.Length() else: metersIndex = 1 ## create First raster memory layer memdrv = gdal.GetDriverByName('MEM') dst_ds = memdrv.Create('', cols, rows, 1, gdal.GDT_Byte) dst_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) dst_ds.SetProjection(srcRas_ds.GetProjection()) band = dst_ds.GetRasterBand(1) band.SetNoDataValue(noDataValue) gdal.RasterizeLayer(dst_ds, [1], source_layer, burn_values=[255]) srcBand = dst_ds.GetRasterBand(1) memdrv2 = gdal.GetDriverByName('MEM') prox_ds = memdrv2.Create('', cols, rows, 1, gdal.GDT_Int16) prox_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) prox_ds.SetProjection(srcRas_ds.GetProjection()) proxBand = prox_ds.GetRasterBand(1) proxBand.SetNoDataValue(noDataValue) options = ['NODATA=0'] ##compute distance to non-zero pixel values and scrBand and store in proxBand gdal.ComputeProximity(srcBand, proxBand, options) memdrv3 = gdal.GetDriverByName('MEM') proxIn_ds = memdrv3.Create('', cols, rows, 1, gdal.GDT_Int16) proxIn_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) proxIn_ds.SetProjection(srcRas_ds.GetProjection()) proxInBand = proxIn_ds.GetRasterBand(1) proxInBand.SetNoDataValue(noDataValue) options = ['NODATA=0', 'VALUES=0'] ##compute distance to zero pixel values and scrBand and store in proxInBand gdal.ComputeProximity(srcBand, proxInBand, options) proxIn = gdalnumeric.BandReadAsArray(proxInBand) proxOut = gdalnumeric.BandReadAsArray(proxBand) ##distance tranform is the distance to zero pixel values minus distance to non-zero pixel values proxTotal = proxIn.astype(float) - proxOut.astype(float) proxTotal = proxTotal * metersIndex if npDistFileName != '': np.save(npDistFileName, proxTotal) return proxTotal
def createDistanceTransform(rasterSrc, vectorSrc, npDistFileName='', units='pixels'): ## open source vector file that truth data source_ds = ogr.Open(vectorSrc) source_layer = source_ds.GetLayer() ## extract data from src Raster File to be emulated ## open raster file that is to be emulated srcRas_ds = gdal.Open(rasterSrc) cols = srcRas_ds.RasterXSize rows = srcRas_ds.RasterYSize noDataValue = 0 if units=='meters': geoTrans, poly, ulX, ulY, lrX, lrY = gT.getRasterExtent(srcRas_ds) transform_WGS84_To_UTM, transform_UTM_To_WGS84, utm_cs = gT.createUTMTransform(poly) line = ogr.Geometry(ogr.wkbLineString) line.AddPoint(geoTrans[0], geoTrans[3]) line.AddPoint(geoTrans[0]+geoTrans[1], geoTrans[3]) line.Transform(transform_WGS84_To_UTM) metersIndex = line.Length() else: metersIndex = 1 ## create First raster memory layer memdrv = gdal.GetDriverByName('MEM') dst_ds = memdrv.Create('', cols, rows, 1, gdal.GDT_Byte) dst_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) dst_ds.SetProjection(srcRas_ds.GetProjection()) band = dst_ds.GetRasterBand(1) band.SetNoDataValue(noDataValue) gdal.RasterizeLayer(dst_ds, [1], source_layer, burn_values=[255]) srcBand = dst_ds.GetRasterBand(1) memdrv2 = gdal.GetDriverByName('MEM') prox_ds = memdrv2.Create('', cols, rows, 1, gdal.GDT_Int16) prox_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) prox_ds.SetProjection(srcRas_ds.GetProjection()) proxBand = prox_ds.GetRasterBand(1) proxBand.SetNoDataValue(noDataValue) options = ['NODATA=0'] ##compute distance to non-zero pixel values and scrBand and store in proxBand gdal.ComputeProximity(srcBand, proxBand, options) memdrv3 = gdal.GetDriverByName('MEM') proxIn_ds = memdrv3.Create('', cols, rows, 1, gdal.GDT_Int16) proxIn_ds.SetGeoTransform(srcRas_ds.GetGeoTransform()) proxIn_ds.SetProjection(srcRas_ds.GetProjection()) proxInBand = proxIn_ds.GetRasterBand(1) proxInBand.SetNoDataValue(noDataValue) options = ['NODATA=0', 'VALUES=0'] ##compute distance to zero pixel values and scrBand and store in proxInBand gdal.ComputeProximity(srcBand, proxInBand, options) proxIn = gdalnumeric.BandReadAsArray(proxInBand) proxOut = gdalnumeric.BandReadAsArray(proxBand) ##distance tranform is the distance to zero pixel values minus distance to non-zero pixel values proxTotal = proxIn.astype(float) - proxOut.astype(float) proxTotal = proxTotal*metersIndex if npDistFileName != '': np.save(npDistFileName, proxTotal) return proxTotal