Example #1
0
def getvector(request):
    assert isinstance(request, HttpRequest)
    json_request = json.dumps(request.GET)
    try:
        table = request.GET.get('table',None)
        glName = request.GET.get('name',None)
        glName += " Glacier"
        body = cache.blobstore.get_blob_to_bytes('ice2ocean',json_request)
        response = HttpResponse(body,'text/xml')
    except:
        try:
            if 'moderncenterlines' in table:
                query = """SELECT ST_AsText(ST_Transform(geom,4246)) FROM %s WHERE glimsid IN (SELECT glimsid FROM modern WHERE name = '%s')""" %(table, glName)
            else:
                query = """SELECT ST_AsText(ST_Transform(geom,4246)) FROM %s WHERE name = '%s'""" %(table, glName)
            ds = b.fetch_query(query)
            # Kilroy: switch to shapely
            # AAA: this is to accommodate 
 #           poly = geometry.from_wkt(ds[0][0])
 #           for p in poly.geoms:
 #               e = p.exterior
 #               for i in range(0,len(e.coords),20):
 #                   lat = e.coords[i][1]
 #                   lon = e.coords[i][0]
 #           response = HttpResponse(ds[0][0],content_type = "text/plain")
 #           print 'past response'
 #           return response
        except:
            print ""
            a.message
            return cr.invalid_parameter()
Example #2
0
def gettimeseries(request):
    assert isinstance(request, HttpRequest)
    json_request = json.dumps(request.GET)
    try:
        table = request.GET.get('table',None)
        mascon = request.GET.get('mascon',None)
        location = request.GET.get('location',None)
        version = request.GET.get('version',None) 
        region = request.GET.get('region',None)
        glacier = request.GET.get('glacier',None)
        collection = request.GET.get('collection',None)
        body = cache.blobstore.get_blob_to_bytes('ice2ocean',json_request)
        response = HttpResponse(body,'text/xml')
    except:
        try:
            if 'GRACE' in table:
                if mascon <> None:
                    query = """SELECT main.date, SUM(main.values_filter1d * cf.correction) FROM
                        (SELECT mascon, (area_km2 / 1e5) AS correction FROM mascon_fit WHERE mascon=%s) as cf LEFT JOIN
                        (SELECT mascon, date, values_filter1d from mascon_solution where version = %s) as main
                        ON cf.mascon = main.mascon GROUP BY date ORDER BY date;""" %(mascon,version)
                else:
                    query = """SELECT main.date, SUM(main.values_filter1d * cf.correction) FROM
                        (SELECT mascon, (area_km2 / 1e5) AS correction FROM mascon_fit WHERE region=%s) as cf LEFT JOIN
                        (SELECT mascon, date, values_filter1d from mascon_solution where version = %s) as main
                        ON cf.mascon = main.mascon GROUP BY date ORDER BY date;""" %(region,version)
            elif 'streamgauges' in table:
                query = """SELECT date, gaugeid, discharge FROM streamgauge_data WHERE gaugeid IN  
                          (SELECT gaugeid from streamgauges where name ~ %s) ORDER BY date""" %(location)
            elif 'pointbalances' in table:
                query = """SELECT start_date, end_date, stake, elevation, balance, 
                           ST_AsText(ST_Transform(geom,4246)) FROM point_balances 
                           WHERE name = %s ORDER BY start_date""" %(glacier)
            elif 'snowradar' in table:
                query = """SELECT s.gid, s.elevation, s.geom, s.swe FROM snowradar AS s,
                          snowradar_lines AS line WHERE line.collection = %s 
                          AND ST_Intersects(line.geom, s.geom) ORDER BY s.elevation""" %(collection)
            print(query)
            ds = b.fetch_query(query)
            response = HttpResponse(mimetype = 'text/csv')
            ds.to_csv(response)
            return response
        except:
            print ""
            a.message
            return cr.invalid_parameter()
Example #3
0
def gettimeseries_metadata(request):
    assert isinstance(request, HttpRequest)
    json_request = json.dumps(request.GET)
    try:
        table = request.GET.get('table',None)
        location = request.GET.get('location',None)
        body = cache.blobstore.get_blob_to_bytes('ice2ocean',json_request)
        response = HttpResponse(body,'text/xml')
    except:
        try:
            if 'streamgauges' in table:
                metatext = b.retrieveRow('snowradar','test')
            response = HttpResponse(metatext,content_type = "text/plain")
            print 'past response'
            return response
        except:
            print ""
            a.message
            return cr.invalid_parameter()
Example #4
0
def getraster(request):
    assert isinstance(request, HttpRequest)
    json_request = json.dumps(request.GET)
    try:
        rparm = request.GET.get('param', None)
        rtime = extract_time(request)
        cmap = request.GET.get('cmap','binary')
        body = cache.blobstore.get_blob_to_bytes('ice2ocean',json_request)
        response = HttpResponse(body,'image/png')
        return response
    except:
        try:
            ### AAA new method of extracting an image based on param 
            if rparm in ('roff','prec'):
                control = fieldManager.getInfo(rparm)
                # ds = b.fetch_ds(rparm,rtime) 
                ds = b.fetch_ds2(rparm)
                print ds
                #lats = ds.variables['latitude'][:]
                #lons = ds.variables['longitude'][:]
                #dataField = ds.variables[control["RowKey"]][:].reshape(len(lats),len(lons))
                #ds.close()
                
                # AAA leave out the reprojection for now
                #plons,plats = bingProjection(lons,lats)
                #plons = plons[0,:]
                #plats = plats[:,0]
                #print plons, plats
               # x = np.arange(xMin, xMin + cellSize * fh.nx, cellSize)
               # y = np.arange(yMin, yMin + cellSize * fh.ny, cellSize)

                #for aRow in parfile:
                #    if (aRow[0] != '!'):
                #        t = aRow.split('=')[0].strip()
                #    try:
                #        exec(t + " = " + aRow.split('=')[1].strip())
                #    except:
                #        a = 1

                nx = 1810
                ny = 900
                d = ds.reshape(-1,ny,nx)
                subset = d[0,:,:]
                img = subset*(subset > 0)
                y, x = np.mgrid[0:ny,0:nx]
                buf = BytesIO()
                plt.imshow(img)
                #plot_to_bytes(lons,lats,dataField,buf,float(control["color_min"]), float(control["color_max"]), cmap_name=cmap)
                plot_to_bytes(x,y,img,buf,float(control["color_min"]), float(control["color_max"]), cmap_name=cmap)
                buf.seek(0)
                data = buf.read()
                buf.close()

                cache.blobstore.put_block_blob_from_bytes('ice2ocean',json_request,data)
        
                response = HttpResponse(data,'image/png')

            else:
                control = fieldManager.getInfo(rparm)

                ds = b.fetch_ds(rtime)
                if not ds:
                    oops = HttpResponseServerError()
                    oops.content = "Unable to retrieve data for request {0}".format(json_request)
                    return oops
                lats = ds.variables['lat_psi'][:]
                lons = ds.variables['lon_psi'][:]

                plons,plats = bingProjection(lons,lats)

                plons = plons[0,:]
                plats = plats[:,0]

                slab = depthSliceOnly(rtime,float(rdepth),control["RowKey"])[1:,1:]
                ds.close()

                buf = BytesIO()
                plot_to_bytes(plons,plats,slab,buf,float(control["color_min"]), float(control["color_max"]),cmap_name=cmap)
                buf.seek(0)
                data = buf.read()
                buf.close()

                cache.blobstore.put_block_blob_from_bytes('liveocean', json_request, data)
        
                response = HttpResponse(data,'image/png')
         
            return response
        except Exception as a:
            try:
                ds.close()
            except:
                print ""
            a.message
            return cr.invalid_parameter()