#
# 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
#
[docs]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"""
[docs]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)
[docs]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)
[docs]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)
[docs]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)
[docs]class IEsriBaseMapLayer(ITileMapLayer):
"""ESRI map layer interface"""
[docs]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()])
[docs]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)