def new(self, type="wms"):
        """Show empty backgroundlayer form."""

        if type == "wms":
            form = WMSLayerForm()
            template = "%s/wmslayer.html" % self.template_dir
        elif type == "wmts":
            form = WMTSLayerForm()
            template = "%s/wmtslayer.html" % self.template_dir
        else:
            flash("Type {0} is not supported.".format(type), "warning")
            return redirect(url_for("backgroundlayers"))

        form.thumbnail.choices = list(map(lambda x: (x, x), ThemeUtils.get_mapthumbs(self.app, self.handler)))
        return render_template(
            template, title="Add background layer", type=type, form=form
        )
예제 #2
0
def load_plugin(app, handler):

    # Check required settings
    config = handler().config()
    for setting in ["input_config_path", "qwc2_path", "qgs_resources_path"]:
        if not os.path.isdir(config.get(setting, "")):
            raise RuntimeError("%s is not set or invalid" % setting)
    if not config.get("ogc_service_url", None):
        raise RuntimeError("ogc_service_url is not set")

    global __background_layers_controller
    global __mapthumbs_controller
    global __themes_controller

    themesconfig = ThemeUtils.load_themesconfig(app, handler)
    __background_layers_controller = BackgroundLayersController(app, handler, themesconfig)
    __mapthumbs_controller = MapthumbsController(app, handler)
    __themes_controller = ThemesController(app, handler, themesconfig)
    def create(self, type="wms"):
        """Add backgroundlayer."""

        if type == "wms":
            form = WMSLayerForm()
            template = "%s/wmslayer.html" % self.template_dir
        elif type == "wmts":
            form = WMTSLayerForm()
            template = "%s/wmtslayer.html" % self.template_dir
        else:
            flash("Type {0} is not supported.".format(type), 'warning')
            return redirect(url_for('backgroundlayers'))

        form.thumbnail.choices = ThemeUtils.get_mapthumbs(
            self.app, self.handler)

        if form.validate_on_submit():
            backgroundlayer = OrderedDict()
            backgroundlayer["type"] = type
            backgroundlayer["url"] = form.url.data
            backgroundlayer["name"] = form.name.data
            backgroundlayer["title"] = form.title.data
            backgroundlayer["attribution"] = form.attribution.data
            backgroundlayer["thumbnail"] = form.thumbnail.data

            if type == "wms":
                backgroundlayer["format"] = form.format.data
                backgroundlayer["srs"] = form.srs.data
                backgroundlayer["tiled"] = form.tiled.data
                bbox = [float(x) for x in form.bbox.data.split(",")]
                backgroundlayer["boundingBox"] = {
                    "crs": form.srs.data,
                    "bounds": bbox
                }
            elif type == "wmts":
                backgroundlayer["url"] = backgroundlayer["url"].replace(
                    "{Style}", form.style.data)
                # TODO: tileMatrixPrefix ?
                backgroundlayer["tileMatrixPrefix"] = ""
                backgroundlayer["tileMatrixSet"] = form.tileMatrixSet.data
                backgroundlayer["projection"] = form.projection.data
                backgroundlayer["originX"] = float(form.originX.data)
                backgroundlayer["originY"] = float(form.originY.data)
                resolutions = [
                    float(x) for x in form.resolutions.data.split(",")
                ]
                backgroundlayer["resolutions"] = resolutions
                tilesize = [int(x) for x in form.tileSize.data.split(",")]
                backgroundlayer["tileSize"] = tilesize

                if form.with_capabilities.data:
                    backgroundlayer["capabilities"] = json.loads(
                        form.capabilities.data)

            self.themesconfig["themes"]["backgroundLayers"].append(
                backgroundlayer)

            if ThemeUtils.save_themesconfig(self.themesconfig, self.app,
                                            self.handler):
                message = "Background layer '{0}' was created.\
                        ".format(backgroundlayer["title"])
                flash(message, "success")
            else:
                message = "Could not save background layer '{0}'.\
                        ".format(backgroundlayer["title"])
                flash(message, "error")

            return redirect(url_for("backgroundlayers"))

        else:
            # TODO: form.errors
            self.app.logger.error("Error adding backroundlayer: \
                                  {}".format(form.errors))
            flash(
                "Background layer could not be created: \
                  {}".format(form.errors), "error")

        return render_template(template,
                               title="Add background layer",
                               type=type,
                               form=form)
예제 #4
0
    def create_form(self, theme=None):
        """Return form with fields loaded from themesConfig.json.

        :param object theme: Optional theme object
        """
        form = ThemeForm()
        if theme:
            form = ThemeForm(url=theme["url"])

        crslist = ThemeUtils.get_crs(self.app, self.handler)

        form.url.choices = [("", "---")] + ThemeUtils.get_projects(self.app, self.handler)
        form.thumbnail.choices = ThemeUtils.get_mapthumbs(self.app, self.handler)
        form.format.choices = ThemeUtils.get_format()
        form.mapCrs.choices = crslist
        form.additionalMouseCrs.choices = crslist
        form.backgroundLayersList = self.get_backgroundlayers()

        if form.backgroundLayers.data:
            for i in range(len(form.backgroundLayers.data)):
                form.backgroundLayers[i].layerName.choices = self.get_backgroundlayers()

        if theme is None:
            return form
        else:
            current_handler = self.handler()
            ogc_service_url = current_handler.config().get("ogc_service_url")
            if "url" in theme:
                if theme["url"].startswith(ogc_service_url):
                    form.url.data = theme["url"]
                else:
                    form.url.data = ogc_service_url.rstrip("/") + "/" + theme["url"]
            else:
                form.url.data = None
            if "title" in theme:
                form.title.data = theme["title"]
            if "default" in theme:
                form.default.data = theme["default"]
            if "thumbnail" in theme:
                form.thumbnail.data = theme["thumbnail"]
            if "attribution" in theme:
                form.attribution.data = theme["attribution"]
            # TODO: FORM attributionUrl
            # if "attributionUrl" in theme:
            #    form.attribution.data = theme["attributionUrl"]
            if "format" in theme:
                form.format.data = theme["format"]
            if "mapCrs" in theme:
                form.mapCrs.data = theme["mapCrs"]
            if "additionalMouseCrs" in theme:
                form.additionalMouseCrs.data = theme["additionalMouseCrs"]
            if "searchProviders" in theme:
                searchProviders = []
                for provider in theme["searchProviders"]:
                    if "key" in provider:
                        searchProviders.append(provider["key"])
                    else:
                        searchProviders.append(provider)
                form.searchProviders.data = ",".join(searchProviders)
            if "scales" in theme:
                form.scales.data = ", ".join(map(str, theme["scales"]))
            if "printScales" in theme:
                form.printScales.data = ", ".join(map(str, theme[
                    "printScales"]))
            if "printResolutions" in theme:
                form.printResolutions.data = ", ".join(map(str, theme[
                    "printResolutions"]))
            if "printLabelBlacklist" in theme:
                form.printLabelBlacklist.data = ", ".join(map(str, theme[
                    "printLabelBlacklist"]))
            if "skipEmptyFeatureAttributes" in theme:
                form.skipEmptyFeatureAttributes.data = theme["skipEmptyFeatureAttributes"]
            if "collapseLayerGroupsBelowLevel" in theme:
                form.collapseLayerGroupsBelowLevel.data = theme["collapseLayerGroupsBelowLevel"]

            if "backgroundLayers" in theme:
                for i, layer in enumerate(theme["backgroundLayers"]):
                    data = {
                        "layerName": ("", ""),
                        "printLayer": "",
                        "visibility": False
                    }

                    for l in self.get_backgroundlayers():
                        if layer["name"] == l[0]:
                            data["layerName"] = l

                    if "printLayer" in layer:
                        data["printLayer"] = layer["printLayer"]

                    if "visibility" in layer:
                        data["visibility"] = layer["visibility"]

                    form.backgroundLayers.append_entry(data)
                    form.backgroundLayers[i].layerName.choices = self.get_backgroundlayers()
                    form.backgroundLayers[i].layerName.data = layer["name"]

            return form
예제 #5
0
 def reset_themesconfig(self):
     self.themesconfig = ThemeUtils.load_themesconfig(self.app, self.handler)
     flash("Theme configuration reloaded from disk.", "warning")
     return redirect(url_for("themes"))