예제 #1
0
def load_coverage():
    project_id = request.form.get('id', False)
    couchdb_coverage = request.form.get('couchdb_coverage', False)
    if couchdb_coverage == 'true':
        couch = CouchDB(
            'http://%s:%s' %
            ('127.0.0.1',
             current_app.config.geobox_state.config.get('couchdb', 'port')),
            current_app.config.geobox_state.config.get(
                'web', 'authorization_layer_name'))

        records = couch.load_records()
        coverage = []
        for record in records:
            geometry = record.get('geometry')
            # load only poylgons or mulitpolygons for coverages
            if geometry and isinstance(
                    geometry,
                    dict) and geometry.get('type') in ('Polygon',
                                                       'MultiPolygon'):
                coverage.append(record)

    else:
        project = g.db.query(model.Project).with_polymorphic('*').filter_by(
            id=project_id).first()
        if not project:
            abort(404)
        coverage = project.coverage

    if not coverage:
        return jsonify(coverage=False)
    else:
        return jsonify(coverage=coverage)
예제 #2
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)
예제 #3
0
def load_coverage():
    project_id = request.form.get('id', False)
    couchdb_coverage = request.form.get('couchdb_coverage', False)
    if couchdb_coverage == 'true':
        couch = CouchDB(
            'http://%s:%s' %
            ('127.0.0.1',
             current_app.config.geobox_state.config.get('couchdb', 'port')),
            current_app.config.geobox_state.config.get(
                'web', 'coverages_from_couchdb'))

        records = couch.load_records()
        coverage = []
        for record in records:
            # load only poylgons or mulitpolygons for coverages
            if record['geometry']['type'] in ('Polygon', 'MultiPolygon'):
                coverage.append(record)

    else:
        project = g.db.query(model.Project).with_polymorphic('*').filter_by(
            id=project_id).first()
        coverage = project.coverage

    if not coverage:
        return jsonify(coverage=False)
    else:
        return jsonify(coverage=coverage)
예제 #4
0
def map():
    raster_sources = g.db.query(LocalWMTSSource).all()
    base_layer = g.db.query(ExternalWMTSSource).filter_by(
        background_layer=True).first()
    base_layer.bbox = base_layer.bbox_from_view_coverage()
    cache_url = get_local_cache_url(request)

    couch = CouchDB(
        'http://%s:%s' %
        ('127.0.0.1',
         current_app.config.geobox_state.config.get('couchdb', 'port')),
        current_app.config.geobox_state.config.get('web',
                                                   'coverages_from_couchdb'))

    records = couch.load_records()
    vector_geometries = []
    for record in records:
        if record['geometry']:  # check if record has geometry type
            vector_geometries.append(record)

    return render_template('map.html',
                           cache_url=cache_url,
                           base_layer=base_layer,
                           sources=raster_sources,
                           vector_geometries=vector_geometries)
예제 #5
0
def create_couch_app_status(couch_url, layers=None):
    couchapp_ready = True
    if layers:
        _layers = layers.split(',')
        layers = {}

        for layer in _layers:
            couchdb = CouchDB(
                'http://127.0.0.1:%s' %
                (current_app.config.geobox_state.config.get('couchdb',
                                                            'port')), layer)
            metadata = couchdb.get('metadata')
            status = replication_status(couch_url, layer)
            if status != 'completed':
                couchapp_ready = False
            layers[metadata['title']] = status
    else:
        layers = {}

    if couchapp_ready:
        couchapp_url = '%s/geobox_couchapp/_design/GeoBoxCouchApp/_rewrite' % couch_url
        flash(_('couchapp ready %(couchapp_url)s', couchapp_url=couchapp_url),
              'success')

    return render_template('create_couch_app_status.html',
                           layers=layers,
                           ready=couchapp_ready)
예제 #6
0
def update_couchdb_sources(gbi_server, app_state):
    couchdb_port = app_state.config.get_int('couchdb', 'port')
    couchdb = CouchDB('http://127.0.0.1:%d' % couchdb_port, '_replicator')
    couchdb_sources = gbi_server.context.couchdb_sources()

    for couchdb_source in couchdb_sources:
        replicate_database(couchdb, couchdb_source, app_state,
                           gbi_server.prefix)
예제 #7
0
def clear_couchdb(name):
    # delete from couch db
    couch = CouchDB(
        'http://127.0.0.1:%s' %
        (current_app.config.geobox_state.config.get('couchdb', 'port'), ),
        name)
    couch.clear_db()
    flash(_('cleared database'))

    return redirect(url_for('.admin'))
예제 #8
0
 def process(self):
     log.debug('Start replication process. Task %d' % self.task_id)
     try:
         with self.task() as task:
             couch = CouchDB(
                 'http://%s:%s' %
                 ('127.0.0.1', self.app_state.config.get(
                     'couchdb', 'port')), task.db_name)
             if task.pull:
                 couch.replicate_pull(task.remote_db_url,
                                      task.remote_db_name)
             if task.push:
                 couch.replicate_push(task.remote_db_url,
                                      task.remote_db_name)
         self.task_done()
     except UnexpectedResponse, e:
         self.task_failed(e)
예제 #9
0
def remove_source(id):
    query = g.db.query(LocalWMTSSource).filter_by(id=id)
    source = query.first()

    if source:
        # delete from couch db
        couch = CouchDB(
            'http://127.0.0.1:%s' %
            (current_app.config.geobox_state.config.get('couchdb', 'port'), ),
            source.wmts_source.name)
        # if delete from couch is successfull delete from db
        if couch.delete_db():
            g.db.delete(source)
            g.db.commit()
            write_mapproxy_config(current_app.config.geobox_state)
            flash(_('delete sucessful'))
        else:
            flash(_('delete not sucessful'))

    return redirect(url_for('.admin'))
예제 #10
0
 def process(self):
     try:
         with self.task() as task:
             export_path = self.app_state.user_data_path('export',
                                                         task.project.title,
                                                         'couchdb',
                                                         make_dirs=True)
             export_name = task.layer.wmts_source.name
         couchdb = TempCouchDB(self.app_state, export_path)
         self.couchdb_port = couchdb.port
         with couchdb.run():
             RasterProcess.process(self)
             couchdb_client = CouchDB(
                 url='http://127.0.0.1:%d' % couchdb.port,
                 db_name=export_name,
             )
             couchdb_client.update_or_create_doc('geobox_info',
                                                 {'type': 'raster'})
     except Exception, e:
         self.task_failed(e)
예제 #11
0
def replicate_database(couchdb, couchdb_source, app_state, prefix=None):
    dbname_user = couchdb_source['dbname_user']
    if prefix is not None:
        dbname_user = '******' % (prefix, dbname_user)
    dburl = source_couchdb_url(couchdb_source)
    couch_url = 'http://127.0.0.1:%d' % app_state.config.get_int(
        'couchdb', 'port')
    target_couchdb = CouchDB(couch_url, dbname_user)
    target_couchdb.init_db()

    couchdb.replication(
        repl_id=couchdb_source['dbname'],
        source=dburl,
        target=dbname_user,
        continuous=True,
    )
    if couchdb_source['writable']:
        couchdb.replication(
            repl_id=couchdb_source['dbname'] + '_push',
            source=dbname_user,
            target=dburl,
            continuous=True,
        )