Beispiel #1
0
    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)
Beispiel #2
0
    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,
            })
Beispiel #3
0
    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)
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
    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,
            })
Beispiel #7
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)
Beispiel #8
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)
Beispiel #9
0
 def bbox_from_view_coverage(self):
     coverage = coverage_from_geojson(self.view_coverage)
     bbox = coverage.bbox
     return bbox
Beispiel #10
0
 def bbox_from_view_coverage(self):
     coverage = coverage_from_geojson(self.view_coverage)
     bbox = coverage.bbox
     return bbox