try:
    from osgeo import gdal
    from osgeo import gdalconst
    from osgeo import osr
    from osgeo import ogr
except ImportError:
    import gdal
    import gdalconst
    import osr
    import ogr
import sys, os, time, re

def Usage():
    print("""
aster_hdf2cover [i_folder][dstfile]
        [i_folder] - input path
        [dstfile] - output GeoJSON file
        """)
    sys.exit(1)

i_folder = None
dstfile = None

gdal.AllRegister()

argv = sys.argv
if argv is None:
    sys.exit( 0 )
# Parse command line arguments.
i = 1
while i < len(argv):
    arg = argv[i]
    if i_folder is None:i_folder = argv[i]
    elif dstfile is None:dstfile = argv[i]
    else:
        Usage()
    i = i + 1
if i_folder is None:Usage()
if dstfile is None:Usage()

features=[]
for root, dirs, files in os.walk(i_folder):
    for file_name in files:
        if re.search(r'AST_.*\.HDF$',file_name.upper(),flags=0) or \
            re.search(r'PG-PR1[AB]0000-\d{10}_\d{3}_\d{3}$',file_name.upper(),flags=0) or \
            re.search(r'^\d{6}_\d{6}.*\.HDF$',file_name.upper(),flags=0):
            hdf_ds = gdal.Open(os.path.join(root,file_name), gdalconst.GA_ReadOnly)
            if hdf_ds is not None:
                #print 'read file: %s'%file_name
                hdf_md=hdf_ds.GetMetadata()
                if hdf_md['INSTRUMENTSHORTNAME']=='ASTER':
                    feature=''
                    uly,ulx=[float(xy) for xy in hdf_md['UPPERLEFT'].split(',')]
                    ury,urx=[float(xy) for xy in hdf_md['UPPERRIGHT'].split(',')]
                    lry,lrx=[float(xy) for xy in hdf_md['LOWERRIGHT'].split(',')]
                    lly,llx=[float(xy) for xy in hdf_md['LOWERLEFT'].split(',')]
                    #extent=[[ulx,uly],[urx,ury],[lrx,lry],[llx,lly],[ulx,uly]]
                    extent='[[%s, %s], [%s, %s], [%s, %s], [%s, %s], [%s, %s]]'%(ulx,uly,urx,ury,lrx,lry,llx,lly,ulx,uly)
                    feature+='{ "type": "Feature", "properties": { '
                    feature+='"TYPE": "%s", "CLOUD": %s, "NAME": "%s", "CD": null, "exist": 1 }, '%(file_name,hdf_md['SCENECLOUDCOVERAGE'],'_'.join([time.strftime('%d%m%y',time.strptime(hdf_md['CALENDARDATE'].replace('-',''),'%Y%m%d')),hdf_md['TIMEOFDAY'].replace(':','')[0:6]]))
                    feature+='"geometry": { "type": "Polygon", "coordinates": [%s]} }'%extent
                    features.append(feature)
                else:
                    print '%s is not ASTER image '%file_name
                hdf_ds = None
            else:
                print 'ERROR open file: %s'%file_name
if features[0]!='':
    out_json=''
    out_json+='{\n"type": "FeatureCollection",\n"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },\n\n'
    out_json+='"features": [\n'
    out_json+=', '.join(features)
    out_json+=']\n}'
    with open(dstfile, 'a') as ofile:
        ofile.write(out_json)