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' }
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])
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' }
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))
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'}