def process(self): log.debug('Start tile merge process. Task %d' % self.task_id) try: with self.task() as task: file_extension = '.tiff' if task.export_format == 'GTiff' else '.jpeg' wmts_source = task.layer.wmts_source export_filename = self.app_state.user_data_path( 'export', task.project.title, wmts_source.name + file_extension, make_dirs=True) couch = CouchDB( 'http://%s:%s' % ('127.0.0.1', self.app_state.config.get( 'couchdb', 'port')), task.layer.name) coverage = coverage_from_geojson(task.coverage).bbox if coverage: merge_tiles(couch, export_filename, task.zoom_level_start, coverage, wmts_source.matrix_set, overlay=wmts_source.is_overlay, format=task.export_format, srs=task.export_srs) self.task_done() except Exception, e: self.task_failed(e)
def _load_sources(self): local_sources = self.db_session.query(LocalWMTSSource).all() for local_source in local_sources: wmts_source = local_source.wmts_source self.sources[wmts_source.name + '_source'] = { 'type': 'wms', 'req': { 'url': 'http://dummy.example.org/service?' }, 'seed_only': True } if wmts_source.download_coverage: self.sources[wmts_source.name + '_source']['coverage'] = { 'srs': 'EPSG:3857', 'bbox': list( coverage_from_geojson( wmts_source.download_coverage).bbox) } self.caches[wmts_source.name + '_cache'] = { 'sources': [wmts_source.name + '_source'], 'grids': [wmts_source.matrix_set], 'cache': { 'type': 'couchdb', 'url': '%s' % self.couchdb_url, 'db_name': wmts_source.name, 'tile_metadata': { 'tile_col': '{{x}}', 'tile_row': '{{y}}', 'tile_level': '{{z}}', 'created_ts': '{{timestamp}}', 'created': '{{utc_iso}}', 'center': '{{wgs_tile_centroid}}' } } } self.layers.append({ 'name': wmts_source.name + '_layer', 'title': wmts_source.title, 'sources': [wmts_source.name + '_cache'], 'min_res': self.grid.resolution(local_source.download_level_start), # increase max_res to allow a bit of oversampling 'max_res': self.grid.resolution(local_source.download_level_end) / 2, })
def process(self): log.debug('Start tile merge process. Task %d' % self.task_id) try: with self.task() as task: file_extension = '.tiff' if task.export_format == 'GTiff' else '.jpeg' wmts_source = task.layer.wmts_source export_filename = self.app_state.user_data_path('export', task.project.title, wmts_source.name + file_extension, make_dirs=True) couch = CouchDB('http://%s:%s' % ('127.0.0.1', self.app_state.config.get('couchdb', 'port')), wmts_source.name) coverage = coverage_from_geojson(task.coverage).bbox merge_tiles(couch, export_filename, task.zoom_level_start, coverage, wmts_source.matrix_set, overlay=wmts_source.is_overlay, format=task.export_format, srs=task.export_srs) self.task_done() except Exception, e: self.task_failed(e)
def estimate_project_tiles(coverage, wmts_source, levels): if wmts_source.download_coverage: wmts_source_coverage = coverage_from_geojson( wmts_source.download_coverage) else: wmts_source_coverage = make_coverage( shapely.geometry.Polygon([(-20037508.34, -20037508.34), (-20037508.34, 20037508.34), (20037508.34, 20037508.34), (20037508.34, -20037508.34)]), SRS(3857)) coverage_intersection = wmts_source_coverage.geom.intersection( coverage.geom) if not coverage_intersection: return 0 intersection = make_coverage(coverage_intersection, SRS(3857)) tiles = estimate_tiles(tile_grid(3857), levels, intersection) return tiles
def estimate_project_tiles(coverage, wmts_source, levels): if wmts_source.download_coverage: wmts_source_coverage = coverage_from_geojson(wmts_source.download_coverage) else: wmts_source_coverage = make_coverage( shapely.geometry.Polygon([ (-20037508.34, -20037508.34), (-20037508.34, 20037508.34), (20037508.34, 20037508.34), (20037508.34, -20037508.34) ]), SRS(3857)) coverage_intersection = wmts_source_coverage.geom.intersection(coverage.geom) if not coverage_intersection: return 0 intersection = make_coverage(coverage_intersection, SRS(3857)) tiles = estimate_tiles(tile_grid(3857), levels, intersection) return tiles
def _load_sources(self): local_sources = self.db_session.query(LocalWMTSSource).all() for local_source in local_sources: wmts_source = local_source.wmts_source self.sources[wmts_source.name + '_source'] = { 'type': 'wms', 'req': { 'url': 'http://dummy.example.org/service?' }, 'seed_only': True } if wmts_source.download_coverage: self.sources[wmts_source.name + '_source']['coverage'] = { 'srs': 'EPSG:3857', 'bbox': list(coverage_from_geojson(wmts_source.download_coverage).bbox) } self.caches[wmts_source.name + '_cache'] = { 'sources': [wmts_source.name + '_source'], 'grids': [wmts_source.matrix_set], 'cache': { 'type': 'couchdb', 'url': '%s' % self.couchdb_url, 'db_name': wmts_source.name, 'tile_metadata': { 'tile_col': '{{x}}', 'tile_row': '{{y}}', 'tile_level': '{{z}}', 'created_ts': '{{timestamp}}', 'created': '{{utc_iso}}', 'center': '{{wgs_tile_centroid}}' } } } self.layers.append({ 'name': wmts_source.name + '_layer', 'title': wmts_source.title, 'sources': [wmts_source.name + '_cache'], 'min_res': self.grid.resolution(local_source.download_level_start), # increase max_res to allow a bit of oversampling 'max_res': self.grid.resolution(local_source.download_level_end) / 2, })
def data_volume(): project_coverage = coverage_from_feature_collection( json.loads(request.form['coverage'])) total_tiles = 0 volume = 0 if project_coverage: for raster_source in json.loads(request.form['raster_data']): wmts_source = None if request.args.get('export', 'false').lower() == 'true': local_source = g.db.query(model.LocalWMTSSource).get( raster_source['source_id']) if local_source: wmts_source = local_source.wmts_source else: wmts_source = g.db.query(model.ExternalWMTSSource).get( raster_source['source_id']) if wmts_source.download_coverage: wmts_source_coverage = coverage_from_geojson( wmts_source.download_coverage) else: wmts_source_coverage = make_coverage( shapely.geometry.Polygon([(-20037508.34, -20037508.34), (-20037508.34, 20037508.34), (20037508.34, 20037508.34), (20037508.34, -20037508.34)]), SRS(3857)) coverage_intersection = wmts_source_coverage.geom.intersection( project_coverage.geom) if not coverage_intersection: continue intersection = make_coverage(coverage_intersection, SRS(3857)) levels = range(raster_source['start_level'], raster_source['end_level'] + 1) source_tiles = estimate_tiles(tile_grid(3857), levels, intersection) volume += source_tiles * 15 total_tiles += source_tiles return jsonify(total_tiles=total_tiles, volume_mb=volume / 1024.0)
def data_volume(): project_coverage = coverage_from_feature_collection(json.loads(request.form["coverage"])) total_tiles = 0 volume = 0 if project_coverage: for raster_source in json.loads(request.form["raster_data"]): wmts_source = None if request.args.get("export", "false").lower() == "true": local_source = g.db.query(model.LocalWMTSSource).get(raster_source["source_id"]) if local_source: wmts_source = local_source.wmts_source else: wmts_source = g.db.query(model.ExternalWMTSSource).get(raster_source["source_id"]) if wmts_source.download_coverage: wmts_source_coverage = coverage_from_geojson(wmts_source.download_coverage) else: wmts_source_coverage = make_coverage( shapely.geometry.Polygon( [ (-20037508.34, -20037508.34), (-20037508.34, 20037508.34), (20037508.34, 20037508.34), (20037508.34, -20037508.34), ] ), SRS(3857), ) coverage_intersection = wmts_source_coverage.geom.intersection(project_coverage.geom) if not coverage_intersection: continue intersection = make_coverage(coverage_intersection, SRS(3857)) levels = range(raster_source["start_level"], raster_source["end_level"] + 1) source_tiles = estimate_tiles(tile_grid(3857), levels, intersection) volume += source_tiles * 15 total_tiles += source_tiles return jsonify(total_tiles=total_tiles, volume_mb=volume / 1024.0)
def bbox_from_view_coverage(self): coverage = coverage_from_geojson(self.view_coverage) bbox = coverage.bbox return bbox
def bbox_from_view_coverage(self): coverage = coverage_from_geojson(self.view_coverage) bbox = coverage.bbox return bbox