Bug Report T294143
Visible to All Users

Usability - Tile images with identical URIs are not displayed correctly after zooming operations

created 9 years ago

I have noticed that when using a custom tile generator, zooming out  in the map control produces some wired behavior in the displayed tiles. This not visible with the Bing Tile provider where the zooming out is smooth. I have also noticed some of the zoomed out tiles leave fragments behind. Can you tell what could be the cause for the zooming out behavior to differ between tile providers and how to prevent  Tile fragments to remain on the screen.

My setup:

I have a custom tile provider which provides a bank png tiles where I dont have data and for the first zoom levels of the map control where the data is not relevant every tile has been generated and stored i a folder structure before hand so the tile provider just creates an Uri object with the correct path. On zooming in to a map zoom level that has data everything behaves normally, but on zooming out  tiles appear to shrink and then get replaced by the tiles form the new zoom level which does not produce the smoothing zooming out effect of the Bing provider. I also get around 40% of the me when I zoom out to a level where the tiles showing data are replaced by empty tiles some tile fragments to remain  on the screen.

My tile generator:

C#
public abstract class BaseTile : MapTileSourceBase { public const int tileSize = 256; public const int maxZoomLevel = 22; protected BaseTile() : base((int)CalculateTotalImageSize(maxZoomLevel), (int)CalculateTotalImageSize(maxZoomLevel), tileSize, tileSize) { } internal static double CalculateTotalImageSize(double zoomLevel) { if (zoomLevel < 1.0) return zoomLevel * tileSize * 2; return Math.Pow(2.0, zoomLevel) * tileSize; } } public class LCMSImageProvider: BaseImageProvider { public LCMSImageProvider() { SetTileSource(new LCMSTileSource()); } protected override MapDependencyObject CreateObject() { return new LCMSImageProvider(); } } public class LCMSTileSource : BaseTile { public LCMSTileSource() : base() { } public override Uri GetTileByZoomLevel(int zoomLevel, int tilePositionX, int tilePositionY) { return BatchLCMSTileFactory.Instance.CreateURI(zoomLevel, tilePositionX, tilePositionY, tileSize, tileSize); } }

I have also attached a video to show the problems related to zooming out.

Comments (3)
DevExpress Support Team 9 years ago

    Hi Ivan,

    Thank you for your report. Our attempts to reproduce a similar issue were not successful. It could be helpful if you clarify whether the BatchLCMSTileFactory.Instance.CreateURI method always returns unique URLs for tiles at different zoom levels. If the same tile URL is used for different tiles, it may not be reloaded (cached) at runtime.

    IP IP
    Ivan Petrov 33 9 years ago

      All tiles which there is data for have unique URI objects, all other tile return a URI object pointing to a blank tile, since there wasn't any reason to create an blank 256x256 image for each tile without data (since typically the data sets cover only 120000 tiles),  I assume that the URI objects appear similar. Does this also relate to the general zooming out behavior which appears choppy compared to how the bing provider layer zooms out?

      DevExpress Support Team 9 years ago

        Hi Ivan,

        Thank you for your clarification. Having discussed this issue, we decided to correct tile processing behavior when identical URIs are provided. We will continue working on this issue and update this ticket status once we have any results.

        Answers approved by DevExpress Support

        created 9 years ago

        We have fixed the issue described in this ticket and will include the fix in our next maintenance update. To apply this solution before the official update, request a hotfix by clicking the corresponding link for product versions you require.

        Note: Hotfixes may be unavailable for beta versions and updates that are about to be released.

          Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

          Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.