From 3a8776ee0342f47a57bcc9365499ebd5d3d7ee1c Mon Sep 17 00:00:00 2001 From: Richard Sassine Date: Mon, 31 May 2021 19:22:23 +0300 Subject: added geoengine --- base_geoengine/geo_view/__init__.py | 24 +++++++ .../geo_view/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 382 bytes .../__pycache__/geo_raster_layer.cpython-36.pyc | Bin 0 -> 2878 bytes .../__pycache__/geo_vector_layer.cpython-36.pyc | Bin 0 -> 2060 bytes .../__pycache__/geo_vector_symbol.cpython-36.pyc | Bin 0 -> 884 bytes .../geo_view/__pycache__/ir_view.cpython-36.pyc | Bin 0 -> 1033 bytes base_geoengine/geo_view/geo_raster_layer.py | 78 +++++++++++++++++++++ base_geoengine/geo_view/geo_raster_layer_view.xml | 71 +++++++++++++++++++ base_geoengine/geo_view/geo_vector_layer.py | 73 +++++++++++++++++++ base_geoengine/geo_view/geo_vector_layer_view.xml | 77 ++++++++++++++++++++ base_geoengine/geo_view/geo_vector_symbol.py | 19 +++++ base_geoengine/geo_view/ir_view.py | 29 ++++++++ base_geoengine/geo_view/ir_view_view.xml | 43 ++++++++++++ 13 files changed, 414 insertions(+) create mode 100644 base_geoengine/geo_view/__init__.py create mode 100644 base_geoengine/geo_view/__pycache__/__init__.cpython-36.pyc create mode 100644 base_geoengine/geo_view/__pycache__/geo_raster_layer.cpython-36.pyc create mode 100644 base_geoengine/geo_view/__pycache__/geo_vector_layer.cpython-36.pyc create mode 100644 base_geoengine/geo_view/__pycache__/geo_vector_symbol.cpython-36.pyc create mode 100644 base_geoengine/geo_view/__pycache__/ir_view.cpython-36.pyc create mode 100644 base_geoengine/geo_view/geo_raster_layer.py create mode 100644 base_geoengine/geo_view/geo_raster_layer_view.xml create mode 100644 base_geoengine/geo_view/geo_vector_layer.py create mode 100644 base_geoengine/geo_view/geo_vector_layer_view.xml create mode 100644 base_geoengine/geo_view/geo_vector_symbol.py create mode 100644 base_geoengine/geo_view/ir_view.py create mode 100644 base_geoengine/geo_view/ir_view_view.xml (limited to 'base_geoengine/geo_view') diff --git a/base_geoengine/geo_view/__init__.py b/base_geoengine/geo_view/__init__.py new file mode 100644 index 0000000..88d8c16 --- /dev/null +++ b/base_geoengine/geo_view/__init__.py @@ -0,0 +1,24 @@ +############################################################################## +# +# Author: Nicolas Bessi +# Copyright 2011-2012 Camptocamp SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +"""Module that manages map view and vector/raster layer""" +from . import geo_raster_layer +from . import geo_vector_layer +from . import geo_vector_symbol +from . import ir_view diff --git a/base_geoengine/geo_view/__pycache__/__init__.cpython-36.pyc b/base_geoengine/geo_view/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000..301550b Binary files /dev/null and b/base_geoengine/geo_view/__pycache__/__init__.cpython-36.pyc differ diff --git a/base_geoengine/geo_view/__pycache__/geo_raster_layer.cpython-36.pyc b/base_geoengine/geo_view/__pycache__/geo_raster_layer.cpython-36.pyc new file mode 100644 index 0000000..9f9f351 Binary files /dev/null and b/base_geoengine/geo_view/__pycache__/geo_raster_layer.cpython-36.pyc differ diff --git a/base_geoengine/geo_view/__pycache__/geo_vector_layer.cpython-36.pyc b/base_geoengine/geo_view/__pycache__/geo_vector_layer.cpython-36.pyc new file mode 100644 index 0000000..756b677 Binary files /dev/null and b/base_geoengine/geo_view/__pycache__/geo_vector_layer.cpython-36.pyc differ diff --git a/base_geoengine/geo_view/__pycache__/geo_vector_symbol.cpython-36.pyc b/base_geoengine/geo_view/__pycache__/geo_vector_symbol.cpython-36.pyc new file mode 100644 index 0000000..f1a1767 Binary files /dev/null and b/base_geoengine/geo_view/__pycache__/geo_vector_symbol.cpython-36.pyc differ diff --git a/base_geoengine/geo_view/__pycache__/ir_view.cpython-36.pyc b/base_geoengine/geo_view/__pycache__/ir_view.cpython-36.pyc new file mode 100644 index 0000000..6a7859a Binary files /dev/null and b/base_geoengine/geo_view/__pycache__/ir_view.cpython-36.pyc differ diff --git a/base_geoengine/geo_view/geo_raster_layer.py b/base_geoengine/geo_view/geo_raster_layer.py new file mode 100644 index 0000000..c990b6a --- /dev/null +++ b/base_geoengine/geo_view/geo_raster_layer.py @@ -0,0 +1,78 @@ +# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA) +# Copyright 2016 Yannick Vaucher (Camptocamp SA) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class GeoRasterLayerType(models.Model): + _name = "geoengine.raster.layer.type" + _description = "Raster Layer Type" + + name = fields.Char(translate=True, required=True) + code = fields.Char(required=True) + service = fields.Char(required=True) + + +class GeoRasterLayer(models.Model): + _name = "geoengine.raster.layer" + _description = "Raster Layer" + + raster_type = fields.Selection( + [ + ("osm", "OpenStreetMap"), + ("wmts", "WMTS"), + ("d_wms", "Distant WMS"), + ("odoo", "Odoo field"), + ], + string="Raster layer type", + default="osm", + required=True, + ) + name = fields.Char("Layer Name", size=256, translate=True, required=True) + url = fields.Char("Service URL", size=1024) + + # technical field to display or not wmts options + is_wmts = fields.Boolean(compute="_compute_is_wmts") + # wmts options + matrix_set = fields.Char("matrixSet") + format_suffix = fields.Char("formatSuffix", help="eg. png") + request_encoding = fields.Char("requestEncoding", help="eg. REST") + projection = fields.Char("projection", help="eg. EPSG:21781") + units = fields.Char(help="eg. m") + resolutions = fields.Char("resolutions") + max_extent = fields.Char("max_extent") + dimensions = fields.Char("dimensions", help="List of dimensions separated by ','") + params = fields.Char("params", help="Dictiorary of values for dimensions as JSON") + + # technical field to display or not layer type + has_type = fields.Boolean(compute="_compute_has_type") + type_id = fields.Many2one( + "geoengine.raster.layer.type", "Layer", domain="[('service', '=', raster_type)]" + ) + type = fields.Char(related="type_id.code") + sequence = fields.Integer("layer priority lower on top", default=6) + overlay = fields.Boolean("Is overlay layer?") + field_id = fields.Many2one( + "ir.model.fields", + "Odoo layer field to use", + domain=[("ttype", "ilike", "geo_"), ("model", "=", "view_id.model")], + ) + view_id = fields.Many2one( + "ir.ui.view", "Related View", domain=[("type", "=", "geoengine")], required=True + ) + use_to_edit = fields.Boolean("Use to edit") + + @api.depends("raster_type", "is_wmts") + def _compute_has_type(self): + for rec in self: + rec.has_type = rec.raster_type == "is_wmts" + + @api.depends("raster_type") + def _compute_is_wmts(self): + for rec in self: + rec.is_wmts = rec.raster_type == "wmts" + + @api.onchange("raster_type") + def onchange_set_wmts_options(self): + """ Abstract method for WMTS modules to set default options """ + pass diff --git a/base_geoengine/geo_view/geo_raster_layer_view.xml b/base_geoengine/geo_view/geo_raster_layer_view.xml new file mode 100644 index 0000000..a49fc5e --- /dev/null +++ b/base_geoengine/geo_view/geo_raster_layer_view.xml @@ -0,0 +1,71 @@ + + + + + geoengine.raster.layer.form + geoengine.raster.layer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + geoengine.raster.layer.tree + geoengine.raster.layer + + + + + + + + + + + + Raster Layer + ir.actions.act_window + geoengine.raster.layer + + + + + +
diff --git a/base_geoengine/geo_view/geo_vector_layer.py b/base_geoengine/geo_view/geo_vector_layer.py new file mode 100644 index 0000000..0c23638 --- /dev/null +++ b/base_geoengine/geo_view/geo_vector_layer.py @@ -0,0 +1,73 @@ +# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA) +# Copyright 2016 Yannick Vaucher (Camptocamp SA) +# Copyright 2021 Shurshilov Artem +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + +SUPPORTED_ATT = [ + "float", + "integer", + "integer_big", + "related", + "function", + "date", + "datetime", + "char", + "text", + "selection", +] + + +class GeoVectorLayer(models.Model): + _name = "geoengine.vector.layer" + _description = "Vector Layer" + + geo_repr = fields.Selection( + [ + ("basic", "Basic"), + # Actually we have to think if we should separate it for colored + ("proportion", "Proportional Symbol"), + ("colored", "Colored range/Chroma.js"), + ], + string="Representation mode", + required=True, + ) + classification = fields.Selection( + [ + ("unique", "Unique value"), + ("interval", "Interval"), + ("quantile", "Quantile"), + ("custom", "Custom"), + ], + string="Classification mode", + required=False, + ) + name = fields.Char("Layer Name", translate=True, required=True) + symbol_ids = fields.One2many("geoengine.vector.symbol", "vector_layer_id") + begin_color = fields.Char( + "Begin color class", size=64, required=False, help="hex value" + ) + end_color = fields.Char( + "End color class", size=64, required=False, help="hex value", default="#FF680A" + ) + nb_class = fields.Integer("Number of class", default=1) + attribute_field_id = fields.Many2one( + "ir.model.fields", "attribute field", domain=[("ttype", "in", SUPPORTED_ATT)] + ) + geo_field_id = fields.Many2one( + "ir.model.fields", + "Geo field", + domain=[("ttype", "ilike", "geo_")], + required=True, + ondelete='cascade' + ) + view_id = fields.Many2one( + "ir.ui.view", "Related View", domain=[("type", "=", "geoengine")], required=True + ) + sequence = fields.Integer("layer priority lower on top", default=6) + readonly = fields.Boolean("Layer is read only") + display_polygon_labels = fields.Boolean("Display Labels on Polygon") + active_on_startup = fields.Boolean( + help="Layer will be shown on startup if checked." + ) + layer_opacity = fields.Float("Layer Opacity") diff --git a/base_geoengine/geo_view/geo_vector_layer_view.xml b/base_geoengine/geo_view/geo_vector_layer_view.xml new file mode 100644 index 0000000..aad55d6 --- /dev/null +++ b/base_geoengine/geo_view/geo_vector_layer_view.xml @@ -0,0 +1,77 @@ + + + + + geoengine.vector.layer.form + geoengine.vector.layer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + geoengine.vector.layer.tree + geoengine.vector.layer + + + + + + + + + + + + + + + Vector Layer + ir.actions.act_window + geoengine.vector.layer + + + + + +
diff --git a/base_geoengine/geo_view/geo_vector_symbol.py b/base_geoengine/geo_view/geo_vector_symbol.py new file mode 100644 index 0000000..2cba932 --- /dev/null +++ b/base_geoengine/geo_view/geo_vector_symbol.py @@ -0,0 +1,19 @@ +# Copyright 2016 Yannick Vaucher (Camptocamp SA) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class GeoVectorSymbol(models.Model): + _name = "geoengine.vector.symbol" + _description = "Vector Layer Symbol" + + vector_layer_id = fields.Many2one("geoengine.vector.layer") + fieldname = fields.Char( + "Category field", + help="Name of the char field or selection field used for comparison", + ) + value = fields.Char(help="All object equal to this value will use this symbol") + img = fields.Char( + help="URL of the image to use. You can put an image in your module " + "in static folder e.g. 'base_geoengine/static/img/map-marker.png'" + ) diff --git a/base_geoengine/geo_view/ir_view.py b/base_geoengine/geo_view/ir_view.py new file mode 100644 index 0000000..971945c --- /dev/null +++ b/base_geoengine/geo_view/ir_view.py @@ -0,0 +1,29 @@ +# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA) +# Copyright 2016 Yannick Vaucher (Camptocamp SA) +# Copyright 2021 Shurshilov Artem +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class IrUIView(models.Model): + _inherit = "ir.ui.view" + + type = fields.Selection(selection_add=[("geoengine", "GeoEngine")], ondelete={'geoengine': 'cascade'}) + + raster_layer_ids = fields.One2many( + "geoengine.raster.layer", "view_id", "Raster layers", required=False + ) + + vector_layer_ids = fields.One2many( + "geoengine.vector.layer", "view_id", "Vector layers", required=True + ) + + projection = fields.Char(default="EPSG:3857", required=True) + default_extent = fields.Char( + "Default map extent", + size=128, + default="-123164.85222423, 5574694.9538936, 1578017.6490538," + " 6186191.1800898", + ) + default_zoom = fields.Integer("Default map zoom") + restricted_extent = fields.Char("Restricted map extent", size=128) diff --git a/base_geoengine/geo_view/ir_view_view.xml b/base_geoengine/geo_view/ir_view_view.xml new file mode 100644 index 0000000..1e9615c --- /dev/null +++ b/base_geoengine/geo_view/ir_view_view.xml @@ -0,0 +1,43 @@ + + + + + geoengine.view.form + ir.ui.view + + + + + + + + + + + + + + + + + + + + + + Views + ir.actions.act_window + ir.ui.view + + + [('type', '=', 'geoengine')] + + + + + -- cgit v1.2.3