예제 #1
0
def check_zoom_levels(gpkg, mapproxy_configuration):
    try:
        grid = mapproxy_configuration.caches.get("default").conf.get("grids")[0]
        tile_size = mapproxy_configuration.grids.get(grid).conf.get("tile_size")
        tile_grid = mapproxy_configuration.grids.get(grid).tile_grid()
        for table_name in get_tile_table_names(gpkg):
            actual_zoom_levels = get_zoom_levels_table(gpkg, table_name)
            gpkg_tile_matrix = get_table_tile_matrix_information(gpkg, table_name)
            for actual_zoom_level in actual_zoom_levels:
                if actual_zoom_level not in [level.get("zoom_level") for level in gpkg_tile_matrix]:
                    res = tile_grid.resolution(actual_zoom_level)
                    grid_sizes = tile_grid.grid_sizes[actual_zoom_level]
                    with sqlite3.connect(gpkg) as conn:
                        conn.execute(
                            """
INSERT OR REPLACE INTO gpkg_tile_matrix (table_name, zoom_level, matrix_width, matrix_height, tile_width, tile_height,
pixel_x_size, pixel_y_size)
VALUES(?, ?, ?, ?, ?, ?, ?, ?)""",
                            (
                                table_name,
                                actual_zoom_level,
                                grid_sizes[0],
                                grid_sizes[1],
                                tile_size[0],
                                tile_size[1],
                                res,
                                res,
                            ),
                        )
    except Exception as e:
        logger.error("Problem in check_zoom_levels: {}".format(e))
        logger.error("Check provider MapProxy configuration.")
예제 #2
0
    def test_get_zoom_levels_table(self, sqlite3):
        expected_zoom_levels = [0, 1, 2]
        mock_zoom_levels = [(expected_zoom_levels[0],), (expected_zoom_levels[1],), (expected_zoom_levels[2],)]
        gpkg = "/test/file.gpkg"
        sqlite3.connect().__enter__().execute.return_value = mock_zoom_levels

        bad_table_name = "test;this"
        returned_zoom_levels = get_zoom_levels_table(gpkg, bad_table_name)
        sqlite3.connect().__enter__().execute.assert_not_called()
        self.assertFalse(returned_zoom_levels)

        table_name = "test"
        returned_zoom_levels = get_zoom_levels_table(gpkg, table_name)
        sqlite3.connect().__enter__().execute.assert_called_once_with(
            "SELECT DISTINCT zoom_level FROM '{0}';".format(table_name))
        self.assertEqual(expected_zoom_levels, returned_zoom_levels)
예제 #3
0
def check_zoom_levels(gpkg, mapproxy_configuration):

    try:
        grid = mapproxy_configuration.caches.get('cache').conf.get('grids')[0]
        tile_size = mapproxy_configuration.grids.get(grid).conf.get('tile_size')
        tile_grid = mapproxy_configuration.grids.get(grid).tile_grid()
        for table_name in get_tile_table_names(gpkg):
            actual_zoom_levels = get_zoom_levels_table(gpkg, table_name)
            gpkg_tile_matrix = get_table_tile_matrix_information(gpkg, table_name)
            for actual_zoom_level in actual_zoom_levels:
                if actual_zoom_level not in [level.get('zoom_level') for level in gpkg_tile_matrix]:
                    res = tile_grid.resolution(actual_zoom_level)
                    grid_sizes = tile_grid.grid_sizes[actual_zoom_level]
                    with sqlite3.connect(gpkg) as conn:
                        conn.execute("""
INSERT OR REPLACE INTO gpkg_tile_matrix (table_name, zoom_level, matrix_width, matrix_height, tile_width, tile_height, pixel_x_size, pixel_y_size) 
VALUES(?, ?, ?, ?, ?, ?, ?, ?)""", (table_name, actual_zoom_level, grid_sizes[0], grid_sizes[1], tile_size[0], tile_size[1], res, res))
    except Exception as e:
        logger.error('Problem in check_zoom_levels: {}'.format(e))