ThinkGeo.com    |     Documentation    |     Premium Support

Map.getbitmap extent wrong

 When I export to bitmap the image generated is 100 x 100 and of a completely wrong section of the map.


 


I assume the image is 100 x 100 because I am using percent and not pixels for map height and width.


 


If I set getbitmap(900,600) the image is the right size, but the extent is still completely wrong.


 


If I set map.currentextent = (x,x,x,x) before calling the getbitmap method, the extent of the image is still completely wrong.



Hi Eric, 
  
 Could you please show us your code of getting the bitmap?  Maybe the extent has not been synchronized to the server side so you get the wrong result. And several days ago we fixed a bug of the GetBitmap method, you can get the latest version first and have a try. 
  
 Regards, 
 Edgar

Does anybody have any info on this?

        public static void exportMap(ref Map map, string fn)
        {

            //Map1.CurrentExtent = new RectangleShape(Convert.ToDouble(args[2]), Convert.ToDouble(args[5]), Convert.ToDouble(args[4]), Convert.ToDouble(args[3]));

            RectangleShape ce = map.CurrentExtent;

            map.CurrentExtent = ce;  //this number checks out

            Bitmap mapbmp = map.GetBitmap(900,600);


            if (!Directory.Exists(HttpContext.Current.Server.MapPath("~/pinnedItems/")))
            {
                Directory.CreateDirectory(HttpContext.Current.Server.MapPath("~/pinnedItems/"));
            }
            string outPath = HttpContext.Current.Server.MapPath("~/pinnedItems/") + fn + ".png";



            mapbmp.Save(outPath);


        }
 


Guys??

 Hello Eric,


 
 Sorry for delay, we did some test on this, and notice if you call your exportMap after the map rendered, the export map is fine, but if you call your exportMap in the control initialize method, it will has problem.
 
 I think the reason is map still rendering, and in this time, the extent will be the extent you set, but after map rendered, map will snapped to the default one zoomscale, so that the extent will be different, so this make the export image looks different with map display image.
 
Map display in brower
 
 
Saved map before snapped:

Saved map after snapped:

 You can try debug and get the Map.CurrentExtent after map rendered, and set this value in your initialize extent and compare the result.
 
If this is the root cause, there are two ways to reslove this, one is call the openlayer save to bitmap method in the OnMapCreated function in client side, another is also in this function but raise a Ajax call and call server side save map.
 
 Regards,
 
 Gary

I am calling the getbitmap method via an AJAX callback, so this is after the map is rendered. 
  
 what is the server side save map method you speak of?

I have taken care of this.  As long as I pass getExtent() from the client side and use this to set extent it seems to work okay. 
  
 However, my marker overlay doesn’t show up in the bitmap.

Hello Eric, 
  
 Yes, you are right, thanks for your information that using Ajax call, we can recreate this problem, I think the reason is Openlayer client side has not totally synchronize to the server side, so the current extent is not the snapped extent when you using Ajax call, we will fix this bug as soon as possible, and will let you know the result. 
  
 Sorry for the inconvenience. 
  
 Regards, 
  
 Gary