rismolath
03-17-2011, 01:36 PM
BUG:
continuing with the post:
then....I think that the problem in my old post http://forum.worldwindcentral.com/sh...ad.php?t=24264 (http://forum.worldwindcentral.com/showthread.php?t=24264) is these. I have these level distributions
----------0
--------1111
-------222222
------33333333
-----444444444
----55555555555
---6666666666666
-----7----77---7
-----8----88---8
-----9----99---9
Only a subset of level 7 exist, then server are looking for other tiles up or down. and spend very much time... and perhaps a hang problem. What do you think?
...
The problem is that when the algorithm recursively looks tiles, find a level that has a proper resolution to the request made by the client and when the level is found, it looks for the tile on the disk, if not found, then it down to the next level and so on even to go down to the last level.
In the cases studied, the request of a large area causes that currentTiles (list of tiles needed to resolve the request), is composed for up to 700 tiles base level.
Later, with each tile is made a mosaic in target raster, creating a loop of 700 tiles!, plus some of those tiles are not in the base level, then the algorithm goes to a higher level for tile (with an affine transform) and clip the sector to the base level. this is made with each tile of a total of 700.
This involve the server with a time of 15 seconds to solve a single request.
To solve the problem only thing to do:
gov.nasa.worldwind.servers.wms.generator s. WorldWindTiledLayer
tileMeetsRenderCriteria(ResourceTile tile, int reqWidth, int reqHeight, Sector reqSector)".
if (tile.getLevel().getTexelSize() > reqTexelSize || tile.getLevel().isEmpty())
{
return false;
}
else
return this.dataFileStore.containsFile(tile.get Path());
change to
if (tile.getLevel().getTexelSize() > reqTexelSize || tile.getLevel().isEmpty())
{
return false;
}
else
return true;
This change ensures that the algorithm returns the list of tiles ideal would resolve the request, then another algorithm (which performs the mosaic) takes care of looking if a tile exists or not and to find its equivalent in the pyramid up .
This change has improved the speed of my server from 15 seconds to 0.8 seconds. to requests for large areas and irregular data pyramids where some tiles do not exist, can mix in a layer different images of different resolutions and levels:
Use Case:
We start ICUBED, and as we have better resolution images of a given area of the world, mix with these ICUBED images obtaining:
----------0
--------1111
-------222222
------33333333
-----444444444
----55555555555
---6666666666666
-----7----77---7
-----8----88---8
-----9----99---9
This change improves server response to requests involving tiles that do not exist in the repository, both for requests of 512 x 512 on WWJ and for larger requests made by other clients ESRI, ERDAS, etc..
Regards
Raul
continuing with the post:
then....I think that the problem in my old post http://forum.worldwindcentral.com/sh...ad.php?t=24264 (http://forum.worldwindcentral.com/showthread.php?t=24264) is these. I have these level distributions
----------0
--------1111
-------222222
------33333333
-----444444444
----55555555555
---6666666666666
-----7----77---7
-----8----88---8
-----9----99---9
Only a subset of level 7 exist, then server are looking for other tiles up or down. and spend very much time... and perhaps a hang problem. What do you think?
...
The problem is that when the algorithm recursively looks tiles, find a level that has a proper resolution to the request made by the client and when the level is found, it looks for the tile on the disk, if not found, then it down to the next level and so on even to go down to the last level.
In the cases studied, the request of a large area causes that currentTiles (list of tiles needed to resolve the request), is composed for up to 700 tiles base level.
Later, with each tile is made a mosaic in target raster, creating a loop of 700 tiles!, plus some of those tiles are not in the base level, then the algorithm goes to a higher level for tile (with an affine transform) and clip the sector to the base level. this is made with each tile of a total of 700.
This involve the server with a time of 15 seconds to solve a single request.
To solve the problem only thing to do:
gov.nasa.worldwind.servers.wms.generator s. WorldWindTiledLayer
tileMeetsRenderCriteria(ResourceTile tile, int reqWidth, int reqHeight, Sector reqSector)".
if (tile.getLevel().getTexelSize() > reqTexelSize || tile.getLevel().isEmpty())
{
return false;
}
else
return this.dataFileStore.containsFile(tile.get Path());
change to
if (tile.getLevel().getTexelSize() > reqTexelSize || tile.getLevel().isEmpty())
{
return false;
}
else
return true;
This change ensures that the algorithm returns the list of tiles ideal would resolve the request, then another algorithm (which performs the mosaic) takes care of looking if a tile exists or not and to find its equivalent in the pyramid up .
This change has improved the speed of my server from 15 seconds to 0.8 seconds. to requests for large areas and irregular data pyramids where some tiles do not exist, can mix in a layer different images of different resolutions and levels:
Use Case:
We start ICUBED, and as we have better resolution images of a given area of the world, mix with these ICUBED images obtaining:
----------0
--------1111
-------222222
------33333333
-----444444444
----55555555555
---6666666666666
-----7----77---7
-----8----88---8
-----9----99---9
This change improves server response to requests involving tiles that do not exist in the repository, both for requests of 512 x 512 on WWJ and for larger requests made by other clients ESRI, ERDAS, etc..
Regards
Raul