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)
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_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)
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)
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)
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)
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'))
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)
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'))
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)
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, )