예제 #1
0
class TestWMTSTileLayout(unittest.TestCase):

    def setUp(self):
        self.rest = WMTSTileLayout(
                url='test',
                layer='layer',
                style='default',
                format='.png',
                dimensions=(('DATE', '2011'),),
                tile_matrix_set='swissgrid',
                request_encoding='REST',
        )
        self.kvp = WMTSTileLayout(
                url='test',
                layer='layer',
                style='default',
                format='.png',
                dimensions=(('DATE', '2011'),),
                tile_matrix_set='swissgrid',
                request_encoding='KVP',
        )

    def test_filename(self):
        self.assertEqual(self.rest.filename(TileCoord(1, 2, 3)), 'test/1.0.0/layer/default/2011/swissgrid/1/3/2.png')
        self.assertEqual(self.kvp.filename(TileCoord(1, 2, 3)), 'test?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2')
예제 #2
0
 def setUp(self):
     self.rest = WMTSTileLayout(
         url='test',
         layer='layer',
         style='default',
         format='.png',
         dimensions=(('DATE', '2011'),),
         tile_matrix_set='swissgrid',
         request_encoding='REST')
     self.kvp = WMTSTileLayout(
         url='test',
         layer='layer',
         style='default',
         format='.png',
         dimensions=(('DATE', '2011'),),
         tile_matrix_set='swissgrid',
         request_encoding='KVP')
     self.rest_nourl = WMTSTileLayout(
         layer='layer',
         style='default',
         format='.png',
         dimensions=(('DATE', '2011'),),
         tile_matrix_set='swissgrid',
         request_encoding='REST')
     self.kvp_nourl = WMTSTileLayout(
         layer='layer',
         style='default',
         format='.png',
         dimensions=(('DATE', '2011'),),
         tile_matrix_set='swissgrid',
         request_encoding='KVP')
예제 #3
0
class TestWMTSTileLayout(unittest.TestCase):
    def setUp(self):
        self.rest = WMTSTileLayout(
            url="test",
            layer="layer",
            style="default",
            format=".png",
            dimensions_name=("DATE", ),
            tile_matrix_set="swissgrid",
            request_encoding="REST",
        )
        self.kvp = WMTSTileLayout(
            url="test",
            layer="layer",
            style="default",
            format=".png",
            dimensions_name=("DATE", ),
            tile_matrix_set="swissgrid",
            request_encoding="KVP",
        )
        self.rest_nourl = WMTSTileLayout(
            layer="layer",
            style="default",
            format=".png",
            dimensions_name=("DATE", ),
            tile_matrix_set="swissgrid",
            request_encoding="REST",
        )
        self.kvp_nourl = WMTSTileLayout(
            layer="layer",
            style="default",
            format=".png",
            dimensions_name=("DATE", ),
            tile_matrix_set="swissgrid",
            request_encoding="KVP",
        )

    def test_filename(self):
        assert (self.rest.filename(
            TileCoord(1, 2, 3),
            {"dimension_DATE": "2011"
             }) == "test/1.0.0/layer/default/2011/swissgrid/1/3/2.png")
        assert (
            self.kvp.filename(TileCoord(1, 2, 3),
                              {"dimension_DATE": "2011"}) ==
            "test?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2"
        )

    def test_filename_without_url(self):
        # s3 url it shouldn't starts with a /
        assert (self.rest_nourl.filename(TileCoord(
            1, 2, 3), {"dimension_DATE": "2011"
                       }) == "1.0.0/layer/default/2011/swissgrid/1/3/2.png")
        assert (
            self.kvp_nourl.filename(TileCoord(1, 2, 3),
                                    {"dimension_DATE": "2011"}) ==
            "?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2"
        )
예제 #4
0
 def setUp(self):
     self.rest = WMTSTileLayout(url='test',
                                layer='layer',
                                style='default',
                                format='.png',
                                dimensions_name=('DATE', ),
                                tile_matrix_set='swissgrid',
                                request_encoding='REST')
     self.kvp = WMTSTileLayout(url='test',
                               layer='layer',
                               style='default',
                               format='.png',
                               dimensions_name=('DATE', ),
                               tile_matrix_set='swissgrid',
                               request_encoding='KVP')
     self.rest_nourl = WMTSTileLayout(layer='layer',
                                      style='default',
                                      format='.png',
                                      dimensions_name=('DATE', ),
                                      tile_matrix_set='swissgrid',
                                      request_encoding='REST')
     self.kvp_nourl = WMTSTileLayout(layer='layer',
                                     style='default',
                                     format='.png',
                                     dimensions_name=('DATE', ),
                                     tile_matrix_set='swissgrid',
                                     request_encoding='KVP')
예제 #5
0
 def setUp(self):
     self.rest = WMTSTileLayout(
         url="test",
         layer="layer",
         style="default",
         format=".png",
         dimensions_name=("DATE", ),
         tile_matrix_set="swissgrid",
         request_encoding="REST",
     )
     self.kvp = WMTSTileLayout(
         url="test",
         layer="layer",
         style="default",
         format=".png",
         dimensions_name=("DATE", ),
         tile_matrix_set="swissgrid",
         request_encoding="KVP",
     )
     self.rest_nourl = WMTSTileLayout(
         layer="layer",
         style="default",
         format=".png",
         dimensions_name=("DATE", ),
         tile_matrix_set="swissgrid",
         request_encoding="REST",
     )
     self.kvp_nourl = WMTSTileLayout(
         layer="layer",
         style="default",
         format=".png",
         dimensions_name=("DATE", ),
         tile_matrix_set="swissgrid",
         request_encoding="KVP",
     )
예제 #6
0
class TestWMTSTileLayout(unittest.TestCase):
    def setUp(self):
        self.rest = WMTSTileLayout(url='test',
                                   layer='layer',
                                   style='default',
                                   format='.png',
                                   dimensions_name=('DATE', ),
                                   tile_matrix_set='swissgrid',
                                   request_encoding='REST')
        self.kvp = WMTSTileLayout(url='test',
                                  layer='layer',
                                  style='default',
                                  format='.png',
                                  dimensions_name=('DATE', ),
                                  tile_matrix_set='swissgrid',
                                  request_encoding='KVP')
        self.rest_nourl = WMTSTileLayout(layer='layer',
                                         style='default',
                                         format='.png',
                                         dimensions_name=('DATE', ),
                                         tile_matrix_set='swissgrid',
                                         request_encoding='REST')
        self.kvp_nourl = WMTSTileLayout(layer='layer',
                                        style='default',
                                        format='.png',
                                        dimensions_name=('DATE', ),
                                        tile_matrix_set='swissgrid',
                                        request_encoding='KVP')

    def test_filename(self):
        self.assertEqual(
            self.rest.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}),
            'test/1.0.0/layer/default/2011/swissgrid/1/3/2.png')
        self.assertEqual(
            self.kvp.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}),
            'test?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2'
        )

    def test_filename_without_url(self):
        # s3 url it shouldn't starts with a /
        self.assertEqual(
            self.rest_nourl.filename(TileCoord(1, 2, 3),
                                     {'dimension_DATE': '2011'}),
            '1.0.0/layer/default/2011/swissgrid/1/3/2.png')
        self.assertEqual(
            self.kvp_nourl.filename(TileCoord(1, 2, 3),
                                    {'dimension_DATE': '2011'}),
            '?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2'
        )
예제 #7
0
class TestWMTSTileLayout(unittest.TestCase):

    def setUp(self):
        self.rest = WMTSTileLayout(
            url='test',
            layer='layer',
            style='default',
            format='.png',
            dimensions_name=('DATE',),
            tile_matrix_set='swissgrid',
            request_encoding='REST')
        self.kvp = WMTSTileLayout(
            url='test',
            layer='layer',
            style='default',
            format='.png',
            dimensions_name=('DATE',),
            tile_matrix_set='swissgrid',
            request_encoding='KVP')
        self.rest_nourl = WMTSTileLayout(
            layer='layer',
            style='default',
            format='.png',
            dimensions_name=('DATE',),
            tile_matrix_set='swissgrid',
            request_encoding='REST')
        self.kvp_nourl = WMTSTileLayout(
            layer='layer',
            style='default',
            format='.png',
            dimensions_name=('DATE',),
            tile_matrix_set='swissgrid',
            request_encoding='KVP')

    def test_filename(self):
        assert self.rest.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}) == 'test/1.0.0/layer/default/2011/swissgrid/1/3/2.png'
        assert self.kvp.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}) == 'test?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2'

    def test_filename_without_url(self):
        # s3 url it shouldn't starts with a /
        assert self.rest_nourl.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}) == '1.0.0/layer/default/2011/swissgrid/1/3/2.png'
        assert self.kvp_nourl.filename(TileCoord(1, 2, 3), {'dimension_DATE': '2011'}) == '?Service=WMTS&Request=GetTile&Format=.png&Version=1.0.0&Layer=layer&Style=default&DATE=2011&TileMatrixSet=swissgrid&TileMatrix=1&TileRow=3&TileCol=2'
예제 #8
0
파일: wmts.py 프로젝트: haroldzmli/rong
 def __init__(self,
              url=None,
              layer=None,
              style=None,
              format=None,
              tile_matrix_set=None,
              tile_matrix=None,
              **kwargs):
     layout = WMTSTileLayout(url, layer, style, format, tile_matrix_set,
                             tile_matrix)
     URLTileStore.__init__(self, (layout, ), **kwargs)
예제 #9
0
 def __init__(
     self,
     url: str = "",
     layer: Optional[str] = None,
     style: Optional[str] = None,
     format: Optional[str] = None,
     tile_matrix_set: Optional[str] = None,
     tile_matrix: type = str,
     **kwargs: Any,
 ):
     layout = WMTSTileLayout(url, layer, style, format, tile_matrix_set, tile_matrix)
     URLTileStore.__init__(self, (layout,), **kwargs)
예제 #10
0
    def get_store(self, cache, layer, read_only=False):
        grid = layer['grid_ref'] if 'grid_ref' in layer else None
        layout = WMTSTileLayout(
            layer=layer['name'],
            url=cache['folder'],
            style=layer['wmts_style'],
            format='.' + layer['extension'],
            dimensions_name=[
                dimension['name'] for dimension in layer['dimensions']
            ],
            tile_matrix_set=layer['grid'],
            tile_matrix=lambda z: get_tile_matrix_identifier(grid, zoom=z),
            request_encoding='REST',
        )
        # store
        if cache['type'] == 's3':
            # on s3
            cache_tilestore = S3TileStore(
                cache['bucket'],
                layout,
                s3_host=cache.get('host'),
                cache_control=cache.get('cache_control'))  # pragma: no cover
        elif cache['type'] == 'mbtiles':
            metadata = {}
            for dimension in layer['dimensions']:
                metadata['dimension_' +
                         dimension['name']] = dimension['default']
            # on mbtiles file
            filename = layout.filename(TileCoord(
                0, 0, 0), metadata=metadata).replace('/0/0/0', '') + '.mbtiles'
            if not os.path.exists(os.path.dirname(filename)):
                os.makedirs(os.path.dirname(filename))
            cache_tilestore = MBTilesTileStore(
                sqlite3.connect(filename),
                content_type=layer['mime_type'],
                tilecoord_in_topleft=True,
            )
        elif cache['type'] == 'bsddb':
            metadata = {}
            for dimension in layer['dimensions']:
                metadata['dimension_' +
                         dimension['name']] = dimension['default']
            import bsddb3 as bsddb
            from tilecloud.store.bsddb import BSDDBTileStore

            # on bsddb file
            filename = layout.filename(TileCoord(
                0, 0, 0), metadata=metadata).replace('/0/0/0', '') + '.bsddb'
            if not os.path.exists(os.path.dirname(filename)):
                os.makedirs(os.path.dirname(filename))
            db = bsddb.hashopen(
                filename,
                # and os.path.exists(filename) to avoid error on non existing file
                'r' if read_only and os.path.exists(filename) else 'c')

            class Close:
                def __init__(self, db):
                    self.db = db

                def __call__(self):
                    self.db.close()

            self._close_actions.append(Close(db))

            cache_tilestore = BSDDBTileStore(
                db,
                content_type=layer['mime_type'],
            )
        elif cache['type'] == 'filesystem':
            # on filesystem
            cache_tilestore = FilesystemTileStore(
                layout,
                content_type=layer['mime_type'],
            )
        else:
            exit('unknown cache type: ' + cache['type'])  # pragma: no cover

        return cache_tilestore
예제 #11
0
    def get_store(self, cache, layer, read_only=False):
        grid = layer['grid_ref'] if 'grid_ref' in layer else None
        layout = WMTSTileLayout(
            layer=layer['name'],
            url=cache['folder'],
            style=layer['wmts_style'],
            format='.' + layer['extension'],
            dimensions_name=[dimension['name'] for dimension in layer['dimensions']],
            tile_matrix_set=layer['grid'],
            tile_matrix=lambda z: get_tile_matrix_identifier(grid, zoom=z),
            request_encoding='REST',
        )
        # store
        if cache['type'] == 's3':
            # on s3
            cache_tilestore = S3TileStore(
                cache['bucket'], layout,
                s3_host=cache.get('host'),
                cache_control=cache.get('cache_control'))  # pragma: no cover
        elif cache['type'] == 'mbtiles':
            metadata = {}
            for dimension in layer['dimensions']:
                metadata['dimension_' + dimension['name']] = dimension['default']
            # on mbtiles file
            filename = layout.filename(
                TileCoord(0, 0, 0), metadata=metadata
            ).replace('/0/0/0', '') + '.mbtiles'
            if not os.path.exists(os.path.dirname(filename)):
                os.makedirs(os.path.dirname(filename))
            cache_tilestore = MBTilesTileStore(
                sqlite3.connect(filename),
                content_type=layer['mime_type'],
                tilecoord_in_topleft=True,
            )
        elif cache['type'] == 'bsddb':
            metadata = {}
            for dimension in layer['dimensions']:
                metadata['dimension_' + dimension['name']] = dimension['default']
            import bsddb3 as bsddb
            from tilecloud.store.bsddb import BSDDBTileStore

            # on bsddb file
            filename = layout.filename(
                TileCoord(0, 0, 0), metadata=metadata
            ).replace('/0/0/0', '') + '.bsddb'
            if not os.path.exists(os.path.dirname(filename)):
                os.makedirs(os.path.dirname(filename))
            db = bsddb.hashopen(
                filename,
                # and os.path.exists(filename) to avoid error on non existing file
                'r' if read_only and os.path.exists(filename) else 'c'
            )

            class Close:
                def __init__(self, db):
                    self.db = db

                def __call__(self):
                    self.db.close()

            self._close_actions.append(Close(db))

            cache_tilestore = BSDDBTileStore(
                db, content_type=layer['mime_type'],
            )
        elif cache['type'] == 'filesystem':
            # on filesystem
            cache_tilestore = FilesystemTileStore(
                layout,
                content_type=layer['mime_type'],
            )
        else:
            exit('unknown cache type: ' + cache['type'])  # pragma: no cover

        return cache_tilestore