예제 #1
0
    def testTerrainMetadataAllTiles(self):
        minZoom = 1
        maxZoom = 2
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)

        self.assertTrue(tMeta.metadata[minZoom]['x'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['x'][1] == 3)
        self.assertTrue(tMeta.metadata[minZoom]['y'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['y'][1] == 1)

        self.assertTrue(tMeta.metadata[maxZoom]['x'][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]['x'][1] == 7)
        self.assertTrue(tMeta.metadata[maxZoom]['y'][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]['y'][1] == 3)

        self.assertTrue(len(tMeta.available) == 2)

        # Assume all tiles are here
        # from metadata to meta
        tMeta.toJSON()
        self.assertTrue(len(tMeta.meta['available'][0]) == 0)
        self.assertTrue(len(tMeta.meta['available'][1]) == 1)
        self.assertTrue(len(tMeta.meta['available'][2]) == 1)

        self.assertTrue(tMeta.meta['available'][1][0]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][1][0]['endX'] == 3)
        self.assertTrue(tMeta.meta['available'][1][0]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][1][0]['endY'] == 1)

        self.assertTrue(tMeta.meta['available'][2][0]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][2][0]['endX'] == 7)
        self.assertTrue(tMeta.meta['available'][2][0]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][2][0]['endY'] == 3)
예제 #2
0
    def testTerrainMetadataAllTiles(self):
        minZoom = 1
        maxZoom = 2
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)

        self.assertTrue(tMeta.metadata[minZoom]["x"][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]["x"][1] == 3)
        self.assertTrue(tMeta.metadata[minZoom]["y"][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]["y"][1] == 1)

        self.assertTrue(tMeta.metadata[maxZoom]["x"][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]["x"][1] == 7)
        self.assertTrue(tMeta.metadata[maxZoom]["y"][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]["y"][1] == 3)

        self.assertTrue(len(tMeta.available) == 2)

        # Assume all tiles are here
        # from metadata to meta
        tMeta.toJSON()
        self.assertTrue(len(tMeta.meta["available"][0]) == 0)
        self.assertTrue(len(tMeta.meta["available"][1]) == 1)
        self.assertTrue(len(tMeta.meta["available"][2]) == 1)

        self.assertTrue(tMeta.meta["available"][1][0]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][1][0]["endX"] == 3)
        self.assertTrue(tMeta.meta["available"][1][0]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][1][0]["endY"] == 1)

        self.assertTrue(tMeta.meta["available"][2][0]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][2][0]["endX"] == 7)
        self.assertTrue(tMeta.meta["available"][2][0]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][2][0]["endY"] == 3)
예제 #3
0
    def testTerrainMetadataAllTiles(self):
        minZoom = 1
        maxZoom = 2
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)

        self.assertTrue(tMeta.metadata[minZoom]['x'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['x'][1] == 3)
        self.assertTrue(tMeta.metadata[minZoom]['y'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['y'][1] == 1)

        self.assertTrue(tMeta.metadata[maxZoom]['x'][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]['x'][1] == 7)
        self.assertTrue(tMeta.metadata[maxZoom]['y'][0] == 0)
        self.assertTrue(tMeta.metadata[maxZoom]['y'][1] == 3)

        self.assertTrue(len(tMeta.available) == 2)

        # Assume all tiles are here
        tMeta.toJSON()
        self.assertTrue(len(tMeta.available[0]) == 1)
        self.assertTrue(len(tMeta.available[1]) == 1)

        self.assertTrue(tMeta.available[0][0]['startX'] == 0)
        self.assertTrue(tMeta.available[0][0]['endX'] == 3)
        self.assertTrue(tMeta.available[0][0]['startY'] == 0)
        self.assertTrue(tMeta.available[0][0]['endY'] == 1)

        self.assertTrue(tMeta.available[1][0]['startX'] == 0)
        self.assertTrue(tMeta.available[1][0]['endX'] == 7)
        self.assertTrue(tMeta.available[1][0]['startY'] == 0)
        self.assertTrue(tMeta.available[1][0]['endY'] == 3)
예제 #4
0
파일: tiler.py 프로젝트: rumicuna/3d-forge
    def metadata(self):
        t0 = time.time()

        db = DB("database.cfg")
        session = sessionmaker()(bind=db.userEngine)
        tiles = Tiles(self.dbConfigFile, self.tmsConfig, t0)
        tMeta = TerrainMetadata(
            bounds=tiles.bounds, minzoom=tiles.tileMinZ, maxzoom=tiles.tileMaxZ, useGlobalTiles=True
        )

        try:
            tilecount = 1
            for tile in tiles:
                tMeta = scanTerrain(tMeta, tile, session, tilecount)
                tilecount += 1

            tend = time.time()
            logger.info("It took %s to scan %s tiles" % (str(datetime.timedelta(seconds=tend - t0)), tilecount))
        except Exception as e:
            logger.error("An error occured during layer.json creation")
            logger.error("%s" % e)
            raise Exception(e)
        finally:
            session.close_all()
            db.userEngine.dispose()

        with open(".tmp/layer.json", "w") as f:
            f.write(tMeta.toJSON())
예제 #5
0
    def metadata(self):
        t0 = time.time()
        basePath = self.tmsConfig.get('General', 'bucketpath')
        baseUrls = []
        url = 'https://terrain.dev.bgdi.ch'
        url += '/%s{z}/{x}/{y}.terrain?v={version}' % basePath
        baseUrls.append(url)
        # TODO
        #for i in range(0, 5):
        #    url = 'https://terrain10%s.geo.admin.ch' % i
        #    url = 'https://terrain10%s.geo.admin.ch' % i
        #    url += '/%s{z}/{x}/{y}.terrain?v={version}' % basePath
        #    baseUrls.append(url)

        db = DB('configs/terrain/database.cfg')
        tiles = TerrainTiles(self.dbConfigFile, self.tmsConfig, t0)
        tMeta = TerrainMetadata(
            bounds=tiles.bounds,
            minzoom=tiles.tileMinZ,
            maxzoom=tiles.tileMaxZ,
            useGlobalTiles=True,
            hasLighting=tiles.hasLighting,
            hasWatermask=tiles.hasWatermask,
            baseUrls=baseUrls)

        try:
            with db.userSession() as session:
                tilecount = 1
                for tile in tiles:
                    tMeta = scanTerrain(tMeta, tile, session, tilecount)
                    tilecount += 1

                tend = time.time()
                logger.info('It took %s to scan %s tiles' % (
                    str(datetime.timedelta(seconds=tend - t0)), tilecount))
        except Exception as e:
            logger.error('An error occured during layer.json creation')
            logger.error('%s' % e, exc_info=True)
            raise Exception(e)
        finally:
            db.userEngine.dispose()

        with open('.tmp/layer.json', 'w') as f:
            f.write(tMeta.toJSON())
예제 #6
0
    def testTerrainMetadataInit(self):
        minZoom = 1
        maxZoom = 1
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)

        self.assertTrue(tMeta.metadata[minZoom]['x'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['x'][1] == 3)
        self.assertTrue(tMeta.metadata[minZoom]['y'][0] == 0)
        self.assertTrue(tMeta.metadata[minZoom]['y'][1] == 1)

        self.assertTrue(len(tMeta.available) == 1)
예제 #7
0
    def metadata(self):
        t0 = time.time()
        serverAddress = self.tmsConfig.get('General', 'serveraddress')
        basePath = self.tmsConfig.get('General', 'bucketpath')
        baseUrls = [
            serverAddress + basePath + "{z}/{x}/{y}.terrain?v={version}"
        ]

        db = DB('configs/terrain/database.cfg')
        tiles = TerrainTiles(self.dbConfigFile, self.tmsConfig, t0)
        tMeta = TerrainMetadata(bounds=tiles.bounds,
                                minzoom=tiles.tileMinZ,
                                maxzoom=tiles.tileMaxZ,
                                useGlobalTiles=True,
                                hasLighting=tiles.hasLighting,
                                hasWatermask=tiles.hasWatermask,
                                baseUrls=baseUrls)

        try:
            with db.userSession() as session:
                tilecount = 1
                for tile in tiles:
                    tMeta = scanTerrain(tMeta, tile, session, tilecount)
                    tilecount += 1

                tend = time.time()
                logger.info(
                    'It took %s to scan %s tiles' %
                    (str(datetime.timedelta(seconds=tend - t0)), tilecount))
        except Exception as e:
            logger.error('An error occured during layer.json creation')
            logger.error('%s' % e, exc_info=True)
            raise Exception(e)
        finally:
            db.userEngine.dispose()

        with open('.tmp/layer.json', 'w') as f:
            f.write(tMeta.toJSON())
예제 #8
0
파일: tiler.py 프로젝트: escribano/3d-forge
    def metadata(self):
        t0 = time.time()
        basePath = self.tmsConfig.get('General', 'bucketpath')
        baseUrls = [
            "//terrain0.geo.admin.ch/" + basePath + "{z}/{x}/{y}.terrain?v={version}",
            "//terrain1.geo.admin.ch/" + basePath + "{z}/{x}/{y}.terrain?v={version}",
            "//terrain2.geo.admin.ch/" + basePath + "{z}/{x}/{y}.terrain?v={version}",
            "//terrain3.geo.admin.ch/" + basePath + "{z}/{x}/{y}.terrain?v={version}",
            "//terrain4.geo.admin.ch/" + basePath + "{z}/{x}/{y}.terrain?v={version}"
        ]

        db = DB('configs/terrain/database.cfg')
        tiles = TerrainTiles(self.dbConfigFile, self.tmsConfig, t0)
        tMeta = TerrainMetadata(
            bounds=tiles.bounds, minzoom=tiles.tileMinZ, maxzoom=tiles.tileMaxZ,
            useGlobalTiles=True, hasLighting=tiles.hasLighting,
            hasWatermask=tiles.hasWatermask, baseUrls=baseUrls)

        try:
            with db.userSession() as session:
                tilecount = 1
                for tile in tiles:
                    tMeta = scanTerrain(tMeta, tile, session, tilecount)
                    tilecount += 1

                tend = time.time()
                logger.info('It took %s to scan %s tiles' % (
                    str(datetime.timedelta(seconds=tend - t0)), tilecount))
        except Exception as e:
            logger.error('An error occured during layer.json creation')
            logger.error('%s' % e, exc_info=True)
            raise Exception(e)
        finally:
            db.userEngine.dispose()

        with open('.tmp/layer.json', 'w') as f:
            f.write(tMeta.toJSON())
예제 #9
0
    def testTerrainMetadataSubset(self):
        minZoom = 1
        maxZoom = 2
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)
        matrices = {minZoom: matrix_1, maxZoom: matrix_2}

        for z in range(minZoom, maxZoom + 1):
            minX = tMeta.metadata[z]["x"][0]
            maxX = tMeta.metadata[z]["x"][1]
            minY = tMeta.metadata[z]["y"][0]
            maxY = tMeta.metadata[z]["y"][1]

            # tile 0,0 == matrix maxX, 0
            for x in range(minX, maxX + 1):
                for y in range(minY, maxY + 1):
                    localX = x - minX
                    localY = (y - maxY) * -1
                    matrix = matrices[z]
                    # y and x inverted in local matrix
                    if matrix[localY][localX] == 0:
                        tMeta.removeTile(x, y, z)

        tMeta.toJSON()

        # Zoom 0 (empty ranges if not define)
        self.assertTrue(len(tMeta.meta["available"][0]) == 0)

        # Zoom 1
        self.assertTrue(tMeta.meta["available"][1][0]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][1][0]["endX"] == 1)
        self.assertTrue(tMeta.meta["available"][1][0]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][1][0]["endY"] == 0)

        self.assertTrue(tMeta.meta["available"][1][1]["startX"] == 3)
        self.assertTrue(tMeta.meta["available"][1][1]["endX"] == 3)
        self.assertTrue(tMeta.meta["available"][1][1]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][1][1]["endY"] == 0)

        self.assertTrue(tMeta.meta["available"][1][2]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][1][2]["endX"] == 0)
        self.assertTrue(tMeta.meta["available"][1][2]["startY"] == 1)
        self.assertTrue(tMeta.meta["available"][1][2]["endY"] == 1)

        self.assertTrue(tMeta.meta["available"][1][3]["startX"] == 2)
        self.assertTrue(tMeta.meta["available"][1][3]["endX"] == 3)
        self.assertTrue(tMeta.meta["available"][1][3]["startY"] == 1)
        self.assertTrue(tMeta.meta["available"][1][3]["endY"] == 1)

        # Zoom 2
        self.assertTrue(tMeta.meta["available"][2][0]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][2][0]["endX"] == 3)
        self.assertTrue(tMeta.meta["available"][2][0]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][2][0]["endY"] == 1)

        self.assertTrue(tMeta.meta["available"][2][1]["startX"] == 5)
        self.assertTrue(tMeta.meta["available"][2][1]["endX"] == 7)
        self.assertTrue(tMeta.meta["available"][2][1]["startY"] == 0)
        self.assertTrue(tMeta.meta["available"][2][1]["endY"] == 1)

        self.assertTrue(tMeta.meta["available"][2][2]["startX"] == 4)
        self.assertTrue(tMeta.meta["available"][2][2]["endX"] == 7)
        self.assertTrue(tMeta.meta["available"][2][2]["startY"] == 2)
        self.assertTrue(tMeta.meta["available"][2][2]["endY"] == 2)

        self.assertTrue(tMeta.meta["available"][2][3]["startX"] == 0)
        self.assertTrue(tMeta.meta["available"][2][3]["endX"] == 7)
        self.assertTrue(tMeta.meta["available"][2][3]["startY"] == 3)
        self.assertTrue(tMeta.meta["available"][2][3]["endY"] == 3)
예제 #10
0
    def testTerrainMetadataSubset(self):
        minZoom = 1
        maxZoom = 2
        tMeta = TerrainMetadata(minzoom=minZoom, maxzoom=maxZoom)
        matrices = {minZoom: matrix_1, maxZoom: matrix_2}

        for z in range(minZoom, maxZoom + 1):
            minX = tMeta.metadata[z]['x'][0]
            maxX = tMeta.metadata[z]['x'][1]
            minY = tMeta.metadata[z]['y'][0]
            maxY = tMeta.metadata[z]['y'][1]

            # tile 0,0 == matrix maxX, 0
            for x in range(minX, maxX + 1):
                for y in range(minY, maxY + 1):
                    localX = x - minX
                    localY = (y - maxY) * -1
                    matrix = matrices[z]
                    # y and x inverted in local matrix
                    if matrix[localY][localX] == 0:
                        tMeta.removeTile(x, y, z)

        tMeta.toJSON()

        # Zoom 0 (empty ranges if not define)
        self.assertTrue(len(tMeta.meta['available'][0]) == 0)

        # Zoom 1
        self.assertTrue(tMeta.meta['available'][1][0]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][1][0]['endX'] == 1)
        self.assertTrue(tMeta.meta['available'][1][0]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][1][0]['endY'] == 0)

        self.assertTrue(tMeta.meta['available'][1][1]['startX'] == 3)
        self.assertTrue(tMeta.meta['available'][1][1]['endX'] == 3)
        self.assertTrue(tMeta.meta['available'][1][1]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][1][1]['endY'] == 0)

        self.assertTrue(tMeta.meta['available'][1][2]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][1][2]['endX'] == 0)
        self.assertTrue(tMeta.meta['available'][1][2]['startY'] == 1)
        self.assertTrue(tMeta.meta['available'][1][2]['endY'] == 1)

        self.assertTrue(tMeta.meta['available'][1][3]['startX'] == 2)
        self.assertTrue(tMeta.meta['available'][1][3]['endX'] == 3)
        self.assertTrue(tMeta.meta['available'][1][3]['startY'] == 1)
        self.assertTrue(tMeta.meta['available'][1][3]['endY'] == 1)

        # Zoom 2
        self.assertTrue(tMeta.meta['available'][2][0]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][2][0]['endX'] == 3)
        self.assertTrue(tMeta.meta['available'][2][0]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][2][0]['endY'] == 1)

        self.assertTrue(tMeta.meta['available'][2][1]['startX'] == 5)
        self.assertTrue(tMeta.meta['available'][2][1]['endX'] == 7)
        self.assertTrue(tMeta.meta['available'][2][1]['startY'] == 0)
        self.assertTrue(tMeta.meta['available'][2][1]['endY'] == 1)

        self.assertTrue(tMeta.meta['available'][2][2]['startX'] == 4)
        self.assertTrue(tMeta.meta['available'][2][2]['endX'] == 7)
        self.assertTrue(tMeta.meta['available'][2][2]['startY'] == 2)
        self.assertTrue(tMeta.meta['available'][2][2]['endY'] == 2)

        self.assertTrue(tMeta.meta['available'][2][3]['startX'] == 0)
        self.assertTrue(tMeta.meta['available'][2][3]['endX'] == 7)
        self.assertTrue(tMeta.meta['available'][2][3]['startY'] == 3)
        self.assertTrue(tMeta.meta['available'][2][3]['endY'] == 3)