コード例 #1
0
def get_response_for_getcapabilities(get_parameters):
    """ Return xml. """
    site = settings.SITE_NAME
    layers = []
    styles = sorted(cm.cmap_d.keys())

    for layername in get_parameters['layers'].split(','):
        pyramid = utils.get_pyramid(layername)
        projection = pyramid.info['projection']
        extent = pyramid.extent
        bboxes = {projections.get_authority(crs):
                  get_transformed_extent(extent, projection, crs)
                  for crs in CAPABILITIES}
        layers.append(dict(bboxes=bboxes, name=layername))

    return flask.render_template(
        'wms/capabilities.xml',
        layers=layers,
        styles=styles,
        site=site,
    ), 200, {
        'content-type': 'application/xml',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET'
    }
コード例 #2
0
ファイル: rasters.py プロジェクト: nens/gislib
 def transformed_cellsize(self, source_projection, target_projection):
     """ Return transformed cellsize. """
     left, bottom, right, top = utils.get_transformed_extent(
         self.extent, source_projection, target_projection,
     )
     return min((right - left) / self.size[0],
                (top - bottom) / self.size[1])
コード例 #3
0
def get_response_for_getcapabilities(get_parameters):
    """ Return xml. """
    site = settings.SITE_NAME
    layers = []
    styles = sorted(cm.cmap_d.keys())

    for layername in get_parameters['layers'].split(','):
        pyramid = utils.get_pyramid(layername)
        projection = pyramid.info['projection']
        extent = pyramid.extent
        bboxes = {
            projections.get_authority(crs):
            get_transformed_extent(extent, projection, crs)
            for crs in CAPABILITIES
        }
        layers.append(dict(bboxes=bboxes, name=layername))

    return flask.render_template(
        'wms/capabilities.xml',
        layers=layers,
        styles=styles,
        site=site,
    ), 200, {
        'content-type': 'application/xml',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET'
    }
コード例 #4
0
ファイル: rasters.py プロジェクト: nens/gislib
    def _tiles(self, dataset, level, limit=False):
        """
        Return tile indices generator for the extent of dataset.

        If limit is true, do not return tiles that are fully outside
        the pyramids extent. This prevents creating lots and lots of
        empty datasets when datasets with extents much larger than our
        own are supplied to warpinto().
        """
        # Determine extent in pyramid projection from dataset
        dataset_geometry = DatasetGeometry.from_dataset(dataset)
        transformed_extent = utils.get_transformed_extent(
            extent=dataset_geometry.extent,
            source_projection=dataset.GetProjection(),
            target_projection=self.projection,
        )
        original_extent = np.array(dataset_geometry.extent)
        difference = (transformed_extent - original_extent).max()

        # If almost the same, take original because of rounding errors
        if difference:
            dataset_extent = transformed_extent
        else:
            dataset_extent = original_extent

        # Return extent, or intersected extent based on limit setting
        if limit:
            extent = np.array(utils.get_extent_intersection(self.extent,
                                                            dataset_extent))
        else:
            extent = np.array(dataset_extent)

        # Determine limits for the indices and return a generator
        delta = self._geometry(level).delta()
        x1, y1 = extent[:2] // delta
        # If extent upper bounds are on tile edge,
        # don't add neighbouring tiles.
        x2, y2 = np.where(
            extent[2:] // delta == extent[2:] / delta,
            extent[2:] // delta - 1,
            extent[2:] // delta,
        )
        # Return generator
        return ((x, y)
                for y in np.arange(y1, y2 + 1, dtype=np.int64)
                for x in np.arange(x1, x2 + 1, dtype=np.int64))
コード例 #5
0
ファイル: responses.py プロジェクト: SiggyF/threedi-wms
def get_response_for_getinfo(get_parameters):
    """ Return json with bounds and timesteps. """
    # Read netcdf
    path = utils.get_netcdf_path(layer=get_parameters['layers'])
    with Dataset(path) as dataset:
        v = dataset.variables
        fex, fey = v['FlowElemContour_x'][:], v['FlowElemContour_y'][:]
        timesteps = v['s1'].shape[0]
        bathymetry = v['bath'][0, :]

    limits = bathymetry.min(), bathymetry.max()
    netcdf_extent = fex.min(), fey.min(), fex.max(), fey.max()

    # Determine transformed extent
    srs = get_parameters['srs']
    if srs:
        # Read projection from bathymetry file, defaults to RD.
        bathy_path = utils.get_bathymetry_path(layer=get_parameters['layers'])
        # It defaults to Rijksdriehoek RD
        source_projection = utils.get_bathymetry_srs(bathy_path)

        logging.info('Source projection: %r' % source_projection)
        #source_projection = 22234 if 'kaapstad' in path.lower() else rasters.RD
        target_projection = srs
        extent = gislib_utils.get_transformed_extent(
            extent=netcdf_extent,
            source_projection=source_projection,
            target_projection=target_projection,
        )
    else:
        logging.warning('No srs data available.')
        extent = netcdf_extent

    # Prepare response
    content = json.dumps(dict(bounds=extent,
                              limits=limits,
                              timesteps=timesteps))
    return content, 200, {
        'content-type': 'application/json',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'GET'}