ThinkGeo.com    |     Documentation    |     Premium Support

Displaying Bitmap image on Map

Dear Support,


We have a new requirement to display Bitmap image on the map as one more layer. By adding this layer i should be able to do all the map operations like zoomin, zoom out, pan, etc on the bit map image also.


Kindly provide us some way to achieve this.


Our application supports .jpg, .jpeg, .sid, .ecw,.tiff, .tif, .Jp2 map files.


On top of these maps, we want to add bitmap layer also.


Thanks in advance.


 



Dear support,


We managed to display image on the map using custom styles.


Thanks,


Gobi.



Gobi,


 I am glad you could find a solution on your own. Of course, if you want to share with us and the community how you implemented this with custom styles, you are welcome. No pressure though and I wish you good luck in your development.



Hi,

We are using RasterLayers.Is there any way to get to know when the RasterLayer loading completed (on zoom in/out)?



When i do zoom in/out, it is taking few seconds (from 2 seconds to 1 mins or more at times), so once the tiles are loaded then i want to clear my data and updaate with latest data.



Please let me know how to get this. Is there any event?

like, layerLoadingstarted, completed, zoomcompleted etc.



Thanks in advance,

Gobi

Hi Gobi, 
  
 Which raster layer are you using? 
  
 If you are using some layer like WmsRasterLayer, we only have event like SendingWebRequest and SentWebRequest. They cannot be used to raise loading complete event. 
  
 Regards, 
  
 Don

Hi Don, 
  
 We are using Jpeg2000RasterLayer.  
  
 I want to know somehow the time when tile loading completes.  
  
 Map.ExtentChanging, Map.ExtentChanged - these functions help me in identifying start of the map zoom event, but i am not able to get load completed event. 
  
 Thanks in advance.

HI there

It would become powerful if you have a new requirement to display Bitmap image.

I have tried a free trial which supports to processing bitmap image.You can just have a try.

Hope to help you.

Hi Abigail, 
  
 Sorry… 
 I am looking for Mapsuite Mapcontrol tile loading completed event.  
 I am not looking for any image processing. 
  
 Thanks.

Hi Gobi,  
  
 I am sorry I talked with our developer, it looks we don’t have an event for loading complete for now. 
  
 Could I know what’s the requirement about “so once the tiles are loaded then i want to clear my data and updaate with latest data.”? 
  
 Have you tried tile cache for improve speed? 
  
 Regards, 
  
 Don

Hi Don, 
  
 Oh sad:(.  
  
 Our application shows continuous live movement of objects on the map. And application gets the update (moving objects details) every 500 milli second.  
  
 Problem:  
 Since the map loading is taking about few seconds, during this time the updates are still coming and it is queued. 
 so it takes further some time to catch up with the live data as it is busy doing all the old updates. 
  
 Workaround/Requirement:  
 Basically, we want to stop processing (queueing) the updates during the map load operation. And resume processing updates as soon as the map loading completed. This will makes the system live as soon as the map loading is completed. 
  
  
 Slowness of the map: 
 Regarding the tile cache, we have already enabled the cache. Still it is taking some time. 
 Especially, I have server with 1GB network link and network utilization is just about 1%, and client is 100Mb network link and utilization is just 2%, but still the first time map loading is taking about 2 seconds to 1 munute. No network utilization. 
  
 Further visits (cached locations), we could see the network utilization of about 5% and loading fast. 
 I guess, first time, creating of cache and writting it to file is keeping the map operation slow. 
  
 Thanks in advance. 
 Regards, 
 Gobi

Hi Gobi, 
  
 It looks your requirement is track objects details(for example vehicles). 
  
 I think if we follow the way to render images each 500 ms, maybe we won’t get a workaround. Because cache won’t work for it, the images are keep modified in a high frequency, so the render time cannot be skip. 
  
 If the images built by yourselves, could you try to get the objects detail information from server and directly render that in our map control? For examples, you can get the objects coordinates and render them in our map as a marker. 
  
 Regards, 
  
 Don

Hi Don, 
  
 We are already doing the same. We are not creating the image, instead we are getting the object coordinates and rending the object dynamically on the map (every 500 ms). 
  
 And when user performs zoom/pan operations then only map download/change will happen.  
  
 When user is performing this zoom operation, we are facing difficulty in rending the objects. To optimize, we need to stop processing the objects while maps are loading. And resume rendering once map is ready. This optimization is required. 
  
 That’s why we are looking for some event to know when map rendering/downloading completed. 
  
 Please advise. Thanks. 
  
 Regards, 
 Gobi

Hi Gobi,



If what I am guessing is correct, you are using the Jpeg2000RasterLayer into another  ServerLayerOverlay in the server side. Since the ServerLayerOverlay inherits from WmsOverlay which is used to request the tiles from server, but unfortunately, it not provide such tileloading or tileloaded events. However, we still can define a custom ServerLayerOverlay to detect those events in the right time:



Client Side:


public partial class DisplayASimpleMap : UserControl
    {
        public DisplayASimpleMap()
        {
            InitializeComponent();
        }
 
        void DisplayASimpleMap_Loaded(object sender, RoutedEventArgs e)
        {
            Map1.MapUnit = GeographyUnit.Meter;
            Map1.CurrentExtent = new RectangleShape(-10888257.578281, 3550139.60333724, -10871812.5725451, 3531992.94634527);
 
            BingMapsOverlay bingMapsOverlay = new BingMapsOverlay("Bing Maps Overlay");
            bingMapsOverlay.Token = "BingKey";
            Map1.Overlays.Add(bingMapsOverlay);
 
            CustomServerLayerOverlay serverLayerOverlay = new CustomServerLayerOverlay("NativeServer""SilverlightMapConnector1");
            serverLayerOverlay.TileType = TileType.MultipleTile;
            Map1.Overlays.Add(serverLayerOverlay);
 
            Map1.Refresh();
        }
    }
 
    public class CustomServerLayerOverlay : ServerLayerOverlay
    {
        public CustomServerLayerOverlay(string id, string connectorId)
            base(id, connectorId)
        {
        }
 
        protected override void DrawCore(RectangleShape worldExtent)
        {
            //Add an event such as LayerLoading, or you can just add your codes here to stop the markers request.
            base.DrawCore(worldExtent);
            //Add an event such as LayerLoaded, or you can just add your codes here to restart the markers request.
        }
    }

Server Side:


Jpeg2000RasterLayer jpegLayer = new Jpeg2000RasterLayer();             
 
ServerLayerOverlay jpegOverlay = new ServerLayerOverlay("NativeServer");
fleeBooleanOverlay.Layers.Add(jpegLayer);
SilverlightMapConnector1.ServerLayerOverlays.Add(jpegOverlay);

Hope it helps and if any thing confused, please feel free to let us know.

Regards,

Johnny