--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_gis/interfaces/layer.py Thu May 18 17:23:48 2017 +0200
@@ -0,0 +1,181 @@
+#
+# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+from pyams_gis.interfaces import LAYER_CRS_VOCABULARY
+from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.location.interfaces import IContained
+
+# import packages
+from pyams_gis.schema import GeoAreaField
+from pyams_i18n.schema import I18nTextLineField
+from zope.interface import Attribute
+from zope.schema import Bool, Choice, Int, TextLine
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
+
+from pyams_gis import _
+
+
+#
+# Leaflet map layers interfaces
+#
+
+class IMapLayer(IContained, IAttributeAnnotatable):
+ """Base map layer interface"""
+
+ factory = Attribute(_("Layer factory name"))
+
+ depends = Attribute(_("List of layer factory dependent objects"))
+
+ name = TextLine(title=_("Layer name"),
+ required=True)
+
+ layer_type = Attribute(_("Layer type"))
+
+ title = I18nTextLineField(title=_("Layer title"),
+ description=_("Full layer title"),
+ required=True)
+
+ min_zoom = Int(title=_("Minimum zoom level"),
+ description=_("Minimum zoom level at which layer is displayed"),
+ default=0,
+ required=True)
+
+ max_zoom = Int(title=_("Maximum zoom level"),
+ description=_("Maximum zoom level at which layer is displayed"),
+ default=18,
+ required=True)
+
+ def get_configuration(self):
+ """Get layer configuration mapping"""
+
+
+class IBaseTileMapLayer(IMapLayer):
+ """Base tile map layer interface"""
+
+ attribution = TextLine(title=_("Layer attribution"),
+ description=_("String used by the attribution control"),
+ required=False)
+
+ bounds = GeoAreaField(title=_("Layer bounds"),
+ description=_("Geographical bounds into which layer tiles are displayed"),
+ required=False)
+
+
+class ITileMapLayer(IBaseTileMapLayer):
+ """Tile map layer interface"""
+
+ url = TextLine(title=_("URL template"),
+ description=_("URL template used to get layer tiles (see leaflet.js docs)"),
+ default='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
+ required=True)
+
+
+class IWMSMapLayer(ITileMapLayer):
+ """WMS map layer interface"""
+
+ crs = Choice(title=_("CRS"),
+ description=_("Coordinates reference system to use for map requests; defaults to map request"),
+ vocabulary=LAYER_CRS_VOCABULARY,
+ required=False)
+
+ layers = TextLine(title=_("Layers"),
+ description=_("Comma-separated list of WMS layers to show"),
+ required=False)
+
+ styles = TextLine(title=_("Styles"),
+ description=_("Comma-separated list of WMS styles"),
+ required=False)
+
+ format = TextLine(title=_("Layer format"),
+ description=_("WMS image format; use 'image/png' for layers with transparency"),
+ required=True,
+ default='image/png')
+
+ transparent = Bool(title=_("Transparent?"),
+ description=_("If 'yes', the WMS services will return images with transparency"),
+ required=True,
+ default=False)
+
+ version = TextLine(title=_("Version"),
+ description=_("Version of the WMS service to use"),
+ required=True,
+ default='1.1.1')
+
+ uppercase = Bool(title=_("Uppercase?"),
+ description=_("If 'yes', WMS request parameters keys will be uppercase"),
+ required=True,
+ default=False)
+
+
+class IGeoportalMapLayer(IBaseTileMapLayer):
+ """French IGN map layer interface"""
+
+ api_key = TextLine(title=_("API key"),
+ description=_("Key used to access layer data"),
+ required=True)
+
+ layer_name = TextLine(title=_("IGN layer name"),
+ description=_("Name of layer in IGN format"),
+ required=True)
+
+ crs = Choice(title=_("CRS"),
+ description=_("Coordinates reference system to use for map requests; defaults to map request"),
+ vocabulary=LAYER_CRS_VOCABULARY,
+ required=False)
+
+
+class IEsriBaseMapLayer(ITileMapLayer):
+ """ESRI map layer interface"""
+
+
+class IEsriFeatureMapLayer(IMapLayer):
+ """ESRI feature layer interface"""
+
+ url = TextLine(title=_("Layer URL"),
+ description=_("URL used to get the feature layer"),
+ required=True)
+
+ token = TextLine(title=_("Token"),
+ description=_("Token used in all service requests"),
+ required=False)
+
+ where = TextLine(title=_("Where condition"),
+ description=_("Optional expression used to filter features"),
+ required=False)
+
+
+GOOGLE_MAP_TYPES = {'roadmap': _("Roads map"),
+ 'satellite': _("Satellite"),
+ 'hybrid': _("Hybrid"),
+ 'terrain': _("Terrain")}
+
+GOOGLE_MAP_TYPES_VOCABULARY = SimpleVocabulary([SimpleTerm(v, title=t) for v, t in GOOGLE_MAP_TYPES.items()])
+
+
+class IGoogleMapLayer(IMapLayer):
+ """Google Maps layer"""
+
+ api_key = TextLine(title=_("API key"),
+ description=_("Google API key used to access maps data"),
+ required=True)
+
+ type = Choice(title=_("Map type"),
+ description=_("Type of GoogleMaps layer type"),
+ vocabulary=GOOGLE_MAP_TYPES_VOCABULARY,
+ default='roadmap',
+ required=True)