|
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) |