Example #1
0
    def get_2d_dataset(
        self, layers, srs, bbox, width, height, styles, bgcolor, transparent, time, elevation, v, filter, **kwargs
    ):
        time = time if time else datetime.now() # if we don't have time, we should use whatever the latest is.

        srs = int(srs[5:] if srs.upper().startswith('EPSG:') else int(srs))
        t_srs = SpatialReference()
        s_srs = SpatialReference()
        s_srs.ImportFromEPSG(4326)
        t_srs.ImportFromEPSG(srs)
        crx = CoordinateTransformation(t_srs, s_srs) # transform to lon-lat for getting into the bathymetry index
        x1, y1, _ = crx.TransformPoint(bbox[0], bbox[1], 0)
        x2, y2, _ = crx.TransformPoint(bbox[2], bbox[3], 0)

        t_srs = SpatialReference()
        s_srs = SpatialReference()
        s_srs.ImportFromEPSG(4326)
        t_srs.ImportFromEPSG(srs)
        xrc = CoordinateTransformation(s_srs, t_srs)

        then = datetime.now() # timing
        if isinstance(styles, list):
             styles = styles[0]
        palette, minv, maxv = self.styles[styles]
        ctx = RenderingContext(palette, bbox[0], bbox[1], bbox[2], bbox[3], minv, maxv, width, height)
        delta = datetime.now() - then # timing
        log.debug("Created rendering context in {secs}.{usecs}".format(secs=delta.seconds, usecs=delta.microseconds)) # timing

        for layer in layers:
            basename, varname = layer.split('.')
            then = datetime.now()
            geometry, values = query.bbox_mean_values_for_triangles(basename, varname, time, (x1,y1,x2,y2))
            delta = datetime.now() - then # timing
            log.debug("query completed in {secs}.{usecs}".format(secs=delta.seconds, usecs=delta.microseconds)) # timing
            if geometry.shape[0] == 0:
               continue
            then = datetime.now()
            if srs != 4326:
                log.debug('transforming geometry from 4326 to {srs}'.format(srs=srs))
                geometry = geometry.reshape(geometry.shape[0]*3, 2)
                for i in range(geometry.shape[0]):
                    x, y, _ = xrc.TransformPoint(geometry[i,0], geometry[i,1])
                    geometry[i,0] = x
                    geometry[i,1] = y
                geometry = geometry.reshape(geometry.shape[0]/3, 3, 2)
            delta = datetime.now() - then # timing
            log.debug("transformation completed in {secs}.{usecs}".format(secs=delta.seconds, usecs=delta.microseconds)) # timing

            ctx.render(geometry, values)

        return ctx.surface
Example #2
0
from osgeo import ogr
from ga_spatialnosql.index import GeoIndex
from datetime import datetime
from django.contrib.gis.geos import Polygon
from cera import query

ds3 = GeoIndex('cera/', 'bathymetry',str,int)
query.ensure_bathymetry_index()

then = datetime.now()
x1,y1,x2,y2 = -81,31,-76,36
bbox = Polygon(((x1,y1), (x2,y1), (x2,y2), (x1,y2), (x1,y1)), srid=4326)
l = ds3.bboverlaps(bbox)
fs = list(l)
delta = datetime.now()
print "finished test 1 in {secs}".format(secs=(delta-then).seconds)

then = datetime.now()
g,l = query.bbox_values_for_triangles('maxelev','inundationZeta',datetime(2012,6,28), (-81,31,-76,36))
print l.shape

delta = datetime.now()
print 'finished test 2 in {secs}'.format(secs=(delta-then).seconds)

then = datetime.now()
g, l = query.bbox_mean_values_for_triangles('maxelev','inundationZeta',datetime(2012,6,28), (-81,31,-76,36))
print l.shape
delta = datetime.now()
print 'finished test 3 in {secs}'.format(secs=(delta-then).seconds)