Source code for pyams_gis.layer

#
# Copyright (c) 2008-2015 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.layer import IMapLayer, IBaseTileMapLayer, ITileMapLayer, IWMSMapLayer, IGeoportalMapLayer, \
    IEsriFeatureMapLayer, IGoogleMapLayer
from pyams_i18n.interfaces import II18n

# import packages
from persistent import Persistent
from pyams_gis import leaflet_gp, leaflet_esri, leaflet_google_mutant
from pyams_utils.dict import update_dict
from pyams_utils.fanstatic import get_resource_path
from zope.container.contained import Contained
from zope.interface import implementer
from zope.schema.fieldproperty import FieldProperty

from pyams_gis import _


[docs]class MapLayer(Persistent, Contained): """Base tile map layer persistent class""" factory = None depends = {} layer_type = None name = FieldProperty(IMapLayer['name']) title = FieldProperty(IMapLayer['title']) min_zoom = FieldProperty(IMapLayer['min_zoom']) max_zoom = FieldProperty(IMapLayer['max_zoom'])
[docs] def get_configuration(self): """Get configuration mapping""" result = {'name': self.name, 'title': II18n(self).query_attribute('title')} update_dict(result, 'factory', self.factory) update_dict(result, 'minZoom', self.min_zoom) update_dict(result, 'maxZoom', self.max_zoom) if self.depends: depends = {} for name, resource in self.depends.items(): depends[name] = get_resource_path(resource) update_dict(result, 'dependsOn', depends) return result
[docs]class BaseTileMapLayer(MapLayer): """Base tile map layer""" attribution = FieldProperty(IBaseTileMapLayer['attribution']) bounds = FieldProperty(IBaseTileMapLayer['bounds'])
[docs] def get_configuration(self): result = super(BaseTileMapLayer, self).get_configuration() update_dict(result, 'attribution', self.attribution) if self.bounds: point1, point2 = self.bounds.wgs_coordinates result['bounds'] = [{'lat': float(point1[1]), 'lon': float(point1[0])}, {'lat': float(point2[1]), 'lon': float(point2[0])}] return result
[docs]@implementer(ITileMapLayer) class TileMapLayer(BaseTileMapLayer): """Base tile map layer persistent class""" factory = 'PyAMS_GIS.factory.TileLayer' layer_type = _("Tile") url = FieldProperty(ITileMapLayer['url'])
[docs] def get_configuration(self): result = super(TileMapLayer, self).get_configuration() update_dict(result, 'url', self.url) return result
[docs]@implementer(IWMSMapLayer) class WMSMapLayer(TileMapLayer): """WMS map mayer persistent class""" factory = 'PyAMS_GIS.factory.WMS' layer_type = _("WMS") crs = FieldProperty(IWMSMapLayer['crs']) layers = FieldProperty(IWMSMapLayer['layers']) styles = FieldProperty(IWMSMapLayer['styles']) format = FieldProperty(IWMSMapLayer['format']) transparent = FieldProperty(IWMSMapLayer['transparent']) version = FieldProperty(IWMSMapLayer['version']) uppercase = FieldProperty(IWMSMapLayer['uppercase'])
[docs] def get_configuration(self): result = super(WMSMapLayer, self).get_configuration() update_dict(result, 'crs', self.crs) update_dict(result, 'layers', self.layers) update_dict(result, 'styles', self.styles) update_dict(result, 'format', self.format) update_dict(result, 'transparent', self.transparent) update_dict(result, 'version', self.version) update_dict(result, 'uppercase', self.uppercase) return result
[docs]@implementer(IGeoportalMapLayer) class GeoportalMapLayer(BaseTileMapLayer): """Geoportal map layer persistent class""" factory = 'PyAMS_GIS.factory.Geoportal.WMS' depends = {'L.geoportalLayer.WMS': leaflet_gp} layer_type = _("Geoportal") api_key = FieldProperty(IGeoportalMapLayer['api_key']) layer_name = FieldProperty(IGeoportalMapLayer['layer_name']) crs = FieldProperty(IGeoportalMapLayer['crs'])
[docs] def get_configuration(self): result = super(GeoportalMapLayer, self).get_configuration() update_dict(result, 'apiKey', self.api_key) update_dict(result, 'layer', self.layer_name) update_dict(result, 'crs', self.crs) return result
[docs]@implementer(IEsriFeatureMapLayer) class EsriFeatureMapLayer(MapLayer): """ESRI feature map layer""" factory = 'PyAMS_GIS.factory.ESRI.Feature' depends = {'L.esri.featureLayer': leaflet_esri} layer_type = _("ESRI Features") url = FieldProperty(IEsriFeatureMapLayer['url']) token = FieldProperty(IEsriFeatureMapLayer['token']) where = FieldProperty(IEsriFeatureMapLayer['where'])
[docs] def get_configuration(self): result = super(EsriFeatureMapLayer, self).get_configuration() update_dict(result, 'url', self.url) update_dict(result, 'token', self.token) update_dict(result, 'where', self.where) return result
[docs]@implementer(IGoogleMapLayer) class GoogleMapLayer(MapLayer): """Google maps layer""" factory = 'PyAMS_GIS.factory.Google' depends = {'L.gridLayer.googleMutant': leaflet_google_mutant} layer_type = _("Google") api_key = FieldProperty(IGoogleMapLayer['api_key']) type = FieldProperty(IGoogleMapLayer['type'])
[docs] def get_configuration(self): result = super(GoogleMapLayer, self).get_configuration() update_dict(result, 'apiKey', self.api_key) update_dict(result, 'type', self.type) return result