Skip to content

Commit 283a70a

Browse files
committed
Update mapcache_detail
1 parent 1834d3d commit 283a70a

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

contrib/mapcache_detail/mapcache_detail.c

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1269,6 +1269,7 @@ int main(int argc, char * argv[])
12691269
mapcache_extent_i db_region_bbox;
12701270
int dbx_has_inv = FALSE;
12711271
int dby_has_inv = FALSE;
1272+
int file_zoom_level;
12721273

12731274
// Select cache according to zoom level
12741275
for ( cid=0 ; cid < caches->nelts ; cid++ ) {
@@ -1292,10 +1293,22 @@ int main(int argc, char * argv[])
12921293

12931294
// Compute region bounding box expressed in tiles and in DB files for the
12941295
// current zoom level
1295-
mapcache_grid_get_xy(&ctx, grid, region_bbox.minx, region_bbox.miny, iz,
1296-
&(til_region_bbox.minx), &(til_region_bbox.miny));
1297-
mapcache_grid_get_xy(&ctx, grid, region_bbox.maxx, region_bbox.maxy, iz,
1298-
&(til_region_bbox.maxx), &(til_region_bbox.maxy));
1296+
file_zoom_level = iz;
1297+
if (cache->top > 0) file_zoom_level = cache->top;
1298+
mapcache_grid_get_xy(&ctx, grid, region_bbox.minx, region_bbox.miny,
1299+
file_zoom_level, &(til_region_bbox.minx), &(til_region_bbox.miny));
1300+
mapcache_grid_get_xy(&ctx, grid, region_bbox.maxx, region_bbox.maxy,
1301+
file_zoom_level, &(til_region_bbox.maxx), &(til_region_bbox.maxy));
1302+
if (til_region_bbox.minx > til_region_bbox.maxx) {
1303+
int swap = til_region_bbox.maxx;
1304+
til_region_bbox.maxx = til_region_bbox.minx;
1305+
til_region_bbox.minx = swap;
1306+
}
1307+
if (til_region_bbox.miny > til_region_bbox.maxy) {
1308+
int swap = til_region_bbox.maxy;
1309+
til_region_bbox.maxy = til_region_bbox.miny;
1310+
til_region_bbox.miny = swap;
1311+
}
12991312

13001313
dbx_has_inv = strstr(cache->dbfile,"{inv_x}")
13011314
|| strstr(cache->dbfile,"{inv_div_x}")
@@ -1304,10 +1317,6 @@ int main(int argc, char * argv[])
13041317
|| strstr(cache->dbfile,"{inv_div_y}")
13051318
|| strstr(cache->dbfile,"{inv_top_y}");
13061319
if (cache->top > 0) {
1307-
mapcache_grid_get_xy(&ctx, grid, region_bbox.minx, region_bbox.miny,
1308-
cache->top, &(til_region_bbox.minx), &(til_region_bbox.miny));
1309-
mapcache_grid_get_xy(&ctx, grid, region_bbox.maxx, region_bbox.maxy,
1310-
cache->top, &(til_region_bbox.maxx), &(til_region_bbox.maxy));
13111320
if (dbx_has_inv) {
13121321
db_region_bbox.minx = grid->levels[cache->top]->maxx-1 - til_region_bbox.maxx;
13131322
db_region_bbox.maxx = grid->levels[cache->top]->maxx-1 - til_region_bbox.minx;
@@ -1360,7 +1369,6 @@ int main(int argc, char * argv[])
13601369
apr_finfo_t fileinfo;
13611370
mapcache_extent_i til_file_bbox;
13621371
mapcache_extent file_bbox;
1363-
int file_zoom_level;
13641372
mapcache_extent temp_bbox;
13651373
mapcache_extent region_in_file_bbox;
13661374
#ifdef USE_CLIPPERS
@@ -1434,23 +1442,21 @@ int main(int argc, char * argv[])
14341442

14351443
// Compute file bounding box expressed in tiles
14361444
if (cache->top > 0) {
1437-
file_zoom_level = cache->top;
14381445
if (dbx_has_inv) {
1439-
til_file_bbox.minx = grid->levels[file_zoom_level]->maxx-1 - ix;
1446+
til_file_bbox.minx = grid->levels[cache->top]->maxx-1 - ix;
14401447
til_file_bbox.maxx = til_file_bbox.minx;
14411448
} else {
14421449
til_file_bbox.minx = ix;
14431450
til_file_bbox.maxx = til_file_bbox.minx;
14441451
}
14451452
if (dby_has_inv) {
1446-
til_file_bbox.miny = grid->levels[file_zoom_level]->maxy-1 - iy;
1453+
til_file_bbox.miny = grid->levels[cache->top]->maxy-1 - iy;
14471454
til_file_bbox.maxy = til_file_bbox.miny;
14481455
} else {
14491456
til_file_bbox.miny = iy;
14501457
til_file_bbox.maxy = til_file_bbox.miny;
14511458
}
14521459
} else if ((cache->xcount > 0) && (cache->ycount > 0)) {
1453-
file_zoom_level = iz;
14541460
if (dbx_has_inv) {
14551461
til_file_bbox.maxx = grid->levels[iz]->maxx-1 - ix * cache->xcount;
14561462
til_file_bbox.minx = til_file_bbox.maxx + cache->xcount + 1;
@@ -1474,7 +1480,6 @@ int main(int argc, char * argv[])
14741480
til_file_bbox.maxy = grid->levels[iz]->maxy - 1;
14751481
}
14761482
} else {
1477-
file_zoom_level = iz;
14781483
til_file_bbox.minx = 0;
14791484
til_file_bbox.miny = 0;
14801485
til_file_bbox.maxx = grid->levels[iz]->maxx - 1;
@@ -1493,6 +1498,16 @@ int main(int argc, char * argv[])
14931498
if (GC_HAS_ERROR(&ctx)) goto failure;
14941499
file_bbox.maxx = temp_bbox.maxx;
14951500
file_bbox.maxy = temp_bbox.maxy;
1501+
if (file_bbox.minx > file_bbox.maxx) {
1502+
int swap = file_bbox.maxx;
1503+
file_bbox.maxx = file_bbox.minx;
1504+
file_bbox.minx = swap;
1505+
}
1506+
if (file_bbox.miny > file_bbox.maxy) {
1507+
int swap = file_bbox.maxy;
1508+
file_bbox.maxy = file_bbox.miny;
1509+
file_bbox.miny = swap;
1510+
}
14961511

14971512
// Compute part of region of interest within file bounding box
14981513
#ifdef USE_CLIPPERS
@@ -1559,6 +1574,16 @@ int main(int argc, char * argv[])
15591574
mapcache_grid_get_xy(&ctx, grid, region_in_file_bbox.maxx-res,
15601575
region_in_file_bbox.maxy-res, iz, &(til_region_in_file_bbox.maxx),
15611576
&(til_region_in_file_bbox.maxy));
1577+
if (til_region_in_file_bbox.minx > til_region_in_file_bbox.maxx) {
1578+
int swap = til_region_in_file_bbox.maxx;
1579+
til_region_in_file_bbox.maxx = til_region_in_file_bbox.minx;
1580+
til_region_in_file_bbox.minx = swap;
1581+
}
1582+
if (til_region_in_file_bbox.miny > til_region_in_file_bbox.maxy) {
1583+
int swap = til_region_in_file_bbox.maxy;
1584+
til_region_in_file_bbox.maxy = til_region_in_file_bbox.miny;
1585+
til_region_in_file_bbox.miny = swap;
1586+
}
15621587
if ((cache->xcount > 0) && (cache->ycount > 0)) {
15631588
if (til_region_in_file_bbox.maxx>(til_file_bbox.minx+cache->xcount-1))
15641589
{

0 commit comments

Comments
 (0)