Beispiel #1
0
    def __init__(self):
        # FIXXME: get parameters from config!
        self.cache = MapCacheSQLite('/var/www/cache')
        self.source = MeshFactoryClient('http://localhost/browse/ows')
        self.gltf_folder = '/var/www/cache/gltf/'

        try:
            if not os.path.exists(self.gltf_folder):
                print '[MeshCache] creating gltf folder in: ' + str(self.gltf_folder)
                os.makedirs(self.gltf_folder)
        except:
            # FIXXME: not so beautiful, but it catches an exception when multiple requests
            # want to create the folder simultaneously
            pass
Beispiel #2
0
class MeshCache(object):
    def __init__(self):
        # FIXXME: get parameters from config!
        self.cache = MapCacheSQLite('/var/www/cache')
        self.source = MeshFactoryClient('http://localhost/browse/ows')
        self.gltf_folder = '/var/www/cache/gltf/'

        try:
            if not os.path.exists(self.gltf_folder):
                print '[MeshCache] creating gltf folder in: ' + str(self.gltf_folder)
                os.makedirs(self.gltf_folder)
        except:
            # FIXXME: not so beautiful, but it catches an exception when multiple requests
            # want to create the folder simultaneously
            pass

    def lookup(self, layer, grid, level, col, row, time):
        logger.info('[MeshCache::lookup] Tile parameters: %s / %s / %s / %s'
                    % (layer, level, col, row))

        tile_geo = self.cache.lookup(layer, grid, level, col, row, time)

        return tile_geo

    def request_and_store(self, layer, grid, level, col, row, time):
        logger.info('[MeshCache::request_and_store] Tile parameters: %s / %s / %s / %s'
                    % (layer, level, col, row))

        files = self.source.request_files(layer, grid, level, col, row, time)
        tilesets = self._convert_files_to_tilesets(files)
        tile_geo = self.cache.store(layer, grid, level, col, row, time, tilesets)

        # FIXXME: Currently dependent glTF files are simply written to a folder on the server. The
        # .json file links to the published endpoint of this folder. In future the dependent files
        # will also be stored in the sqlite-db!
        for file in files:
            target = open(self.gltf_folder + file['name'], 'w')

            # target.write(file['buffer'].replace('"path": "', '"path": "http://localhost:3080/gltf/'))
            target.write(file['buffer'])
            # logger.info('Wrote to: ' + self.gltf_folder + file['name'])

        return tile_geo

    def _convert_files_to_tilesets(self, files):
        file_json = None

        for item in files:
            if item['name'].endswith('.json'):
                file_json = item['buffer']

        tileset_wmts = {}
        tileset_wmts['protocol'] = 'WMTS'
        tileset_wmts['data'] = 'test'

        tileset_w3ds = {}
        tileset_w3ds['protocol'] = 'W3DS'
        tileset_w3ds['json'] = file_json
        tileset_w3ds['bin'] = ''
        tileset_w3ds['vert'] = ''
        tileset_w3ds['frag'] = ''

        tilesets = []
        tilesets.append(tileset_wmts)
        tilesets.append(tileset_w3ds)

        logger.info('[MeshCache::_convert_files_to_tilesets] converted files to tilesets')

        return tilesets