src/pyams_gis/interfaces/layer.py
changeset 0 c73bb834ccbe
child 73 d9ee6f8ddb76
equal deleted inserted replaced
-1:000000000000 0:c73bb834ccbe
       
     1 #
       
     2 # Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
       
     3 # All Rights Reserved.
       
     4 #
       
     5 # This software is subject to the provisions of the Zope Public License,
       
     6 # Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
       
     7 # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
       
     8 # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
       
     9 # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
       
    10 # FOR A PARTICULAR PURPOSE.
       
    11 #
       
    12 
       
    13 __docformat__ = 'restructuredtext'
       
    14 
       
    15 
       
    16 # import standard library
       
    17 
       
    18 # import interfaces
       
    19 from pyams_gis.interfaces import LAYER_CRS_VOCABULARY
       
    20 from zope.annotation.interfaces import IAttributeAnnotatable
       
    21 from zope.location.interfaces import IContained
       
    22 
       
    23 # import packages
       
    24 from pyams_gis.schema import GeoAreaField
       
    25 from pyams_i18n.schema import I18nTextLineField
       
    26 from zope.interface import Attribute
       
    27 from zope.schema import Bool, Choice, Int, TextLine
       
    28 from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
       
    29 
       
    30 from pyams_gis import _
       
    31 
       
    32 
       
    33 #
       
    34 # Leaflet map layers interfaces
       
    35 #
       
    36 
       
    37 class IMapLayer(IContained, IAttributeAnnotatable):
       
    38     """Base map layer interface"""
       
    39 
       
    40     factory = Attribute(_("Layer factory name"))
       
    41 
       
    42     depends = Attribute(_("List of layer factory dependent objects"))
       
    43 
       
    44     name = TextLine(title=_("Layer name"),
       
    45                     required=True)
       
    46 
       
    47     layer_type = Attribute(_("Layer type"))
       
    48 
       
    49     title = I18nTextLineField(title=_("Layer title"),
       
    50                               description=_("Full layer title"),
       
    51                               required=True)
       
    52 
       
    53     min_zoom = Int(title=_("Minimum zoom level"),
       
    54                    description=_("Minimum zoom level at which layer is displayed"),
       
    55                    default=0,
       
    56                    required=True)
       
    57 
       
    58     max_zoom = Int(title=_("Maximum zoom level"),
       
    59                    description=_("Maximum zoom level at which layer is displayed"),
       
    60                    default=18,
       
    61                    required=True)
       
    62 
       
    63     def get_configuration(self):
       
    64         """Get layer configuration mapping"""
       
    65 
       
    66 
       
    67 class IBaseTileMapLayer(IMapLayer):
       
    68     """Base tile map layer interface"""
       
    69 
       
    70     attribution = TextLine(title=_("Layer attribution"),
       
    71                            description=_("String used by the attribution control"),
       
    72                            required=False)
       
    73 
       
    74     bounds = GeoAreaField(title=_("Layer bounds"),
       
    75                           description=_("Geographical bounds into which layer tiles are displayed"),
       
    76                           required=False)
       
    77 
       
    78 
       
    79 class ITileMapLayer(IBaseTileMapLayer):
       
    80     """Tile map layer interface"""
       
    81 
       
    82     url = TextLine(title=_("URL template"),
       
    83                    description=_("URL template used to get layer tiles (see leaflet.js docs)"),
       
    84                    default='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
       
    85                    required=True)
       
    86 
       
    87 
       
    88 class IWMSMapLayer(ITileMapLayer):
       
    89     """WMS map layer interface"""
       
    90 
       
    91     crs = Choice(title=_("CRS"),
       
    92                  description=_("Coordinates reference system to use for map requests; defaults to map request"),
       
    93                  vocabulary=LAYER_CRS_VOCABULARY,
       
    94                  required=False)
       
    95 
       
    96     layers = TextLine(title=_("Layers"),
       
    97                       description=_("Comma-separated list of WMS layers to show"),
       
    98                       required=False)
       
    99 
       
   100     styles = TextLine(title=_("Styles"),
       
   101                       description=_("Comma-separated list of WMS styles"),
       
   102                       required=False)
       
   103 
       
   104     format = TextLine(title=_("Layer format"),
       
   105                       description=_("WMS image format; use 'image/png' for layers with transparency"),
       
   106                       required=True,
       
   107                       default='image/png')
       
   108 
       
   109     transparent = Bool(title=_("Transparent?"),
       
   110                        description=_("If 'yes', the WMS services will return images with transparency"),
       
   111                        required=True,
       
   112                        default=False)
       
   113 
       
   114     version = TextLine(title=_("Version"),
       
   115                        description=_("Version of the WMS service to use"),
       
   116                        required=True,
       
   117                        default='1.1.1')
       
   118 
       
   119     uppercase = Bool(title=_("Uppercase?"),
       
   120                      description=_("If 'yes', WMS request parameters keys will be uppercase"),
       
   121                      required=True,
       
   122                      default=False)
       
   123 
       
   124 
       
   125 class IGeoportalMapLayer(IBaseTileMapLayer):
       
   126     """French IGN map layer interface"""
       
   127 
       
   128     api_key = TextLine(title=_("API key"),
       
   129                        description=_("Key used to access layer data"),
       
   130                        required=True)
       
   131 
       
   132     layer_name = TextLine(title=_("IGN layer name"),
       
   133                           description=_("Name of layer in IGN format"),
       
   134                           required=True)
       
   135 
       
   136     crs = Choice(title=_("CRS"),
       
   137                  description=_("Coordinates reference system to use for map requests; defaults to map request"),
       
   138                  vocabulary=LAYER_CRS_VOCABULARY,
       
   139                  required=False)
       
   140 
       
   141 
       
   142 class IEsriBaseMapLayer(ITileMapLayer):
       
   143     """ESRI map layer interface"""
       
   144 
       
   145 
       
   146 class IEsriFeatureMapLayer(IMapLayer):
       
   147     """ESRI feature layer interface"""
       
   148 
       
   149     url = TextLine(title=_("Layer URL"),
       
   150                    description=_("URL used to get the feature layer"),
       
   151                    required=True)
       
   152 
       
   153     token = TextLine(title=_("Token"),
       
   154                      description=_("Token used in all service requests"),
       
   155                      required=False)
       
   156 
       
   157     where = TextLine(title=_("Where condition"),
       
   158                      description=_("Optional expression used to filter features"),
       
   159                      required=False)
       
   160 
       
   161 
       
   162 GOOGLE_MAP_TYPES = {'roadmap': _("Roads map"),
       
   163                     'satellite': _("Satellite"),
       
   164                     'hybrid': _("Hybrid"),
       
   165                     'terrain': _("Terrain")}
       
   166 
       
   167 GOOGLE_MAP_TYPES_VOCABULARY = SimpleVocabulary([SimpleTerm(v, title=t) for v, t in GOOGLE_MAP_TYPES.items()])
       
   168 
       
   169 
       
   170 class IGoogleMapLayer(IMapLayer):
       
   171     """Google Maps layer"""
       
   172 
       
   173     api_key = TextLine(title=_("API key"),
       
   174                        description=_("Google API key used to access maps data"),
       
   175                        required=True)
       
   176 
       
   177     type = Choice(title=_("Map type"),
       
   178                   description=_("Type of GoogleMaps layer type"),
       
   179                   vocabulary=GOOGLE_MAP_TYPES_VOCABULARY,
       
   180                   default='roadmap',
       
   181                   required=True)