def import_edit(id=None): sources = g.db.query(model.ExternalWMTSSource).all() if id is None: proj = model.ImportProject() else: proj = g.db.query(model.ImportProject).get(id) if not proj: abort(404) coverage_form = forms.SelectCoverage() form = forms.ImportProjectEdit(request.form) form.start_level.choices = get_levels(model.ExternalWMTSSource) form.end_level.choices = get_levels(model.ExternalWMTSSource) form.update_tiles.checked = proj.update_tiles if form.validate_on_submit() and validate_max_tiles(form): redirect_url = url_for('.import_list', id=id) proj.title = form.data['title'] proj.import_raster_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage( form.coverage.data) else: proj.coverage = '' coverage = None proj.download_size = float(form.data.get('download_size', 0.0)) proj.update_tiles = form.data.get('update_tiles', False) g.db.add( model.ImportRasterLayer(source=form.raster_source.data, start_level=int(form.start_level.data), end_level=int(form.end_level.data), project=proj)) g.db.commit() if form.start.data == 'start': redirect_url = url_for('project.start_raster_import', id=proj.id) return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title if proj.import_raster_layers: form.raster_source.data = proj.import_raster_layers[0].source if not request.form.get('start_level'): form.start_level.data = proj.import_raster_layers[0].start_level if not request.form.get('end_level'): form.end_level.data = proj.import_raster_layers[0].end_level coverage = proj.coverage if proj.coverage else 'null' if form.coverage.data: coverage = form.coverage.data base_layers = g.db.query( model.ExternalWMTSSource).filter_by(background_layer=True).all() for base_layer in base_layers: base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb( current_app.config.geobox_state.user_data_path()) couch_url = 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get( 'couchdb', 'port')) couch_layers = list(vector_layers_metadata(couch_url)) couchlayers_form = forms.SelectCouchLayers() couch_titles = [] for key, couch in enumerate(couch_layers): couch_titles.append((key, couch['title'])) couchlayers_form.select_couch.choices = couch_titles return render_template('projects/import_edit.html', proj=proj, form=form, sources=sources, couch_layers=couch_layers, base_layers=base_layers, coverage_form=coverage_form, couchlayers_form=couchlayers_form, coverage=coverage, free_disk_space=free_disk_space, with_server=True)
def import_edit(id): proj = g.db.query(model.ImportProject).get(id) sources = g.db.query(model.ExternalWMTSSource).all() if not proj: abort(404) coverage_form = forms.SelectCoverage() form = forms.ImportProjectEdit(request.form) form.start_level.choices = get_levels(model.ExternalWMTSSource) form.end_level.choices = get_levels(model.ExternalWMTSSource) form.update_tiles.checked = proj.update_tiles if form.validate_on_submit(): redirect_url = url_for('.import_list', id=id) proj.title = form.data['title'] proj.import_raster_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage( form.coverage.data) else: proj.coverage = '' proj.download_size = float(form.data.get('download_size', 0.0)) proj.update_tiles = form.data.get('update_tiles', False) g.db.add( model.ImportRasterLayer(source=form.raster_source.data, start_level=int(form.start_level.data), end_level=int(form.end_level.data), project=proj)) g.db.commit() if form.start.data == 'start': local_raster_source = g.db.query(model.LocalWMTSSource).filter_by( wmts_source=form.raster_source.data).first() if local_raster_source: local_raster_source.download_level_start = min( local_raster_source.download_level_start, int(form.start_level.data)) local_raster_source.download_level_end = max( local_raster_source.download_level_end, int(form.end_level.data)) else: local_raster_source = model.LocalWMTSSource( download_level_start=int(form.start_level.data), download_level_end=int(form.end_level.data), wmts_source_id=form.raster_source.data.id) g.db.add( model.RasterImportTask( source=form.raster_source.data, zoom_level_start=int(form.start_level.data), zoom_level_end=int(form.end_level.data), layer=local_raster_source, coverage=prepare_task_coverage(form.coverage.data), update_tiles=form.update_tiles.data, project=proj)) redirect_url = url_for('tasks.list') g.db.commit() write_mapproxy_config(current_app.config.geobox_state) return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title has_zoom_level = 'false' if proj.import_raster_layers: form.raster_source.data = proj.import_raster_layers[0].source form.start_level.data = proj.import_raster_layers[0].start_level form.end_level.data = proj.import_raster_layers[0].end_level has_zoom_level = 'true' coverage = proj.coverage if proj.coverage else 'null' base_layer = g.db.query( model.ExternalWMTSSource).filter_by(background_layer=True).first() base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb( current_app.config.geobox_state.user_data_path()) return render_template('projects/import_edit.html', proj=proj, form=form, sources=sources, has_zoom_level=has_zoom_level, base_layer=base_layer, coverage_form=coverage_form, coverage=coverage, free_disk_space=free_disk_space)
def export_edit(id=None): if id is None: proj = model.ExportProject() else: proj = g.db.query(model.ExportProject).get(id) if not proj: abort(404) raster_sources = g.db.query(model.LocalWMTSSource).order_by( model.LocalWMTSSource.id).all() coverage_form = forms.SelectCoverage() form = forms.ExportProjectEdit(request.form) form.end_level.choices = form.start_level.choices = get_levels( model.LocalWMTSSource) form.srs.choices = list( current_app.config.geobox_state.config.get('web', 'available_srs')) if form.validate_on_submit(): proj.title = form.data['title'] proj.export_raster_layers = [] proj.export_vector_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage( form.coverage.data) else: proj.coverage = '' proj.export_srs = form.srs.data proj.export_format = form.format.data proj.download_size = float(form.data.get('download_size', 0.0)) g.db.commit() redirect_url = url_for('.export_list', id=id) for raster_layer in json.loads(form.data['raster_layers']): raster_source = g.db.query(model.LocalWMTSSource).get( raster_layer['source_id']) start_level = int(raster_layer['start_level']) end_level = int( raster_layer.get('end_level') or raster_layer['start_level']) if not proj.coverage: raster_coverage = raster_source.wmts_source.download_coverage proj.coverage = raster_coverage else: raster_coverage = proj.coverage g.db.add( model.ExportRasterLayer(source=raster_source, start_level=start_level, end_level=end_level, project=proj)) g.db.commit() if form.start.data == 'start': create_export_tasks(proj) redirect_url = url_for('tasks.list') return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title form.format.data = proj.export_format form.srs.data = proj.export_srs coverage = proj.coverage if proj.coverage else 'null' if form.coverage.data: coverage = form.coverage.data base_layers = g.db.query( model.ExternalWMTSSource).filter_by(background_layer=True).all() for base_layer in base_layers: base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb( current_app.config.geobox_state.user_data_path()) cache_url = get_external_couch_url(request) couch_url = 'http://%s:%s' % ('127.0.0.1', current_app.config.geobox_state.config.get( 'couchdb', 'port')) couch_layers = list(vector_layers_metadata(couch_url)) couchlayers_form = forms.SelectCouchLayers() couch_titles = [] for key, couch in enumerate(couch_layers): couch_titles.append((key, couch['title'])) couchlayers_form.select_couch.choices = couch_titles return render_template('projects/export_edit.html', proj=proj, form=form, raster_sources=raster_sources, couch_layers=couch_layers, layers=proj.export_raster_layers, base_layers=base_layers, coverage=coverage, free_disk_space=free_disk_space, coverage_form=coverage_form, couchlayers_form=couchlayers_form, cache_url=cache_url)
def export_edit(id): from ...lib.vectormapping import default_mappings as mappings proj = g.db.query(model.ExportProject).get(id) raster_sources = g.db.query(model.LocalWMTSSource).order_by( model.LocalWMTSSource.id).all() if not proj: abort(404) coverage_form = forms.SelectCoverage() form = forms.ExportProjectEdit(request.form) form.end_level.choices = form.start_level.choices = get_levels( model.LocalWMTSSource) form.mapping_name.choices = [ (name, '%s (%s, %s)' % (mapping.name, mapping.geom_type, mapping.other_srs.srs_code)) for name, mapping in mappings.items() ] form.srs.choices = [(srs, srs) for srs in current_app.config.geobox_state.config.get( 'web', 'available_srs')] if form.validate_on_submit(): proj.title = form.data['title'] proj.export_raster_layers = [] proj.export_vector_layers = [] if form.coverage.data != 'false': proj.coverage = prepare_feature_collection_coverage( form.coverage.data) else: proj.coverage = '' proj.export_srs = form.srs.data proj.export_format = form.format.data proj.download_size = float(form.data.get('download_size', 0.0)) g.db.commit() redirect_url = url_for('.export_list', id=id) for raster_layer in json.loads(form.data['raster_layers']): raster_source = g.db.query(model.LocalWMTSSource).get( raster_layer['source_id']) start_level = int(raster_layer['start_level']) end_level = int( raster_layer.get('end_level') or raster_layer['start_level']) if not proj.coverage: raster_coverage = raster_source.wmts_source.download_coverage proj.coverage = raster_coverage else: raster_coverage = proj.coverage g.db.add( model.ExportRasterLayer(source=raster_source, start_level=start_level, end_level=end_level, project=proj)) if form.start.data == 'start': g.db.add( model.RasterExportTask(layer=raster_source, export_format=proj.export_format, export_srs=proj.export_srs, zoom_level_start=start_level, zoom_level_end=end_level, coverage=raster_coverage, project=proj)) redirect_url = url_for('tasks.list') if form.data['mapping_name'] != 'None': g.db.add( model.ExportVectorLayer(mapping_name=form.data['mapping_name'], project=proj)) if form.start.data == 'start': g.db.add( model.VectorExportTask( db_name=mappings[form.data['mapping_name']].couchdb, mapping_name=form.data['mapping_name'], project=proj, )) redirect_url = url_for('tasks.list') g.db.commit() return redirect(redirect_url) elif request.method == 'POST': flash(_('form error'), 'error') form.title.data = proj.title form.format.data = proj.export_format form.srs.data = proj.export_srs if proj.export_vector_layers: form.mapping_name.data = proj.export_vector_layers[0].mapping_name coverage = proj.coverage if proj.coverage else 'null' base_layer = g.db.query( model.ExternalWMTSSource).filter_by(background_layer=True).first() base_layer.bbox = base_layer.bbox_from_view_coverage() free_disk_space = diskspace_available_in_mb( current_app.config.geobox_state.user_data_path()) cache_url = get_local_cache_url(request) return render_template('projects/export_edit.html', proj=proj, form=form, raster_sources=raster_sources, layers=proj.export_raster_layers, base_layer=base_layer, coverage=coverage, free_disk_space=free_disk_space, coverage_form=coverage_form, cache_url=cache_url)