ThinkGeo.com    |     Documentation    |     Premium Support

Bing maps as background map

Hi I'm recently started out and wonder how to load bing maps as a backround map in the component?


Thats possible isn't it?


(I've tried the VirtualEarthLayer but that seems to require some login info which I don't have. I only got a key or token on my bing maps developer account. We will purchase a bing license key for enterprise use later on but I had hoped to be able try get it working with the developer license first)


 


Thanks in advance



Hi Magnus,



Now the Bing map's license is changed and with the new license strategy, we have changed to use BingMapLayer instead. You can use it with your registered map account. You can register your account following this article:

msdn.microsoft.com/en-us/library/ff428642.aspx



Here is the code we tested.

Map1.MapUnit = GeographyUnit.Meter;
Map1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);

string accountId = "[ACCOUNTID]";
string password = "[PASSWORD]";
string clientIpAddress = "[CLIENTIP]";
BingMapLayer worldLayer = new BingMapLayer(accountId, password, clientIpAddress);

LayerOverlay layerOverlay = new LayerOverlay();
layerOverlay.Layers.Add(worldLayer);
Map1.Overlays.Add(layerOverlay);

Map1.Refresh();



Please have a try and let us know how it works.



Thanks,

Howard



Thanks Howard for your swift reply. 
  
 I have some difficulty in Locating the definition for BingMapLayer. 
 Isn’t it included in the trial software ? 
  
 My WpfDesktopEdition.dll, MapSuiteCore.dll and MicrosoftMapLayerExtension are all version 4.0.40.0 (2010-06-13) 
  
 Thanks in advance  
 /Magnus

Hi again!

I managed to get some account info for another valid account we have at work 

(seems like it was the account info since my newly created bing account info wouldn't work 



I got this to work in my client with my version of the code



string accountId = "[ACCOUNTID]";
string passwd = "[PASSWD]";
string client = "[CLIENTIP]";
Map.MapUnit = GeographyUnit.Meter;
Map.CurrentExtent = new RectangleShape(-10000000, 10000000, 10000000, -10000000);
LayerOverlay overlay = new LayerOverlay();
VirtualEarthLayer layer = new VirtualEarthLayer(accountId, passwd, client);
layer.CacheDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
layer.MapType = VirtualEarthMapType.AerialWithLabels;
overlay.Layers.Add(layer);
Map.Overlays.Add("WORLD", overlay);
Map.Refresh();


However the loading of the map was really slow... is this due to the old implementation I'm using ?


Don't you have some form of deepzoom implementation or such in your component?



Thanks in advance 

/Magnus



Hi Magnus, 
  
 Sorry that I didn’t mentioned the BingMapsLayer is in our latest build and you can request from support@thinkgeo.com.  
  
 I checked the mechanism of Bing maps layer. You know the TileOverlay is formed with several tiles. Each tile is in charge of requesting image by it self. When one tile is requesting image from server, we might split this tile extent to several pieces and request separately. Then merge the separated pieces back to one whole image when all pieces respond. I think this is the key which causes the slow. It’s how we implemented in the Core and we maintain the mechanism in our other products. Hope you understand. Just let me know if you have any misunderstanding about this. 
  
 On the other hand, I’ll research Bing maps server and see if we can do something special on the Wpf Edition. 
  
 Hope it makes sense. Please try the Bing maps layer with SingleTile type for LayerOverlay temporary. 
  
 Thanks, 
 Howard

Hi Magnus,



Today, I added a BingMapsOverlay class which has big enhancement on the performance than using Layer. But it's not full tested. If you want to trail it, please request the latest version 4.0.149.0 after from support@thinkgeo.com. Here is the code:

Map1.MapUnit = GeographyUnit.Meter;
Map1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);

BingMapsTileOverlay bingOverlay = new BingMapsTileOverlay("[You application Id registered]");
bingOverlay.MapType = BingMapsStyle.AerialWithLabels;
Map1.Overlays.Add(bingOverlay);

Map1.Refresh();
 

Thanks,

Howard



Awsome Howard I will do that ! 
  


Hi Magnus, 
  
 Please give us some feedback after trying it then.  
  
 Thanks, 
 Howard

Hello again Howard! 
  
 I tried your new version and it’s much better (quite neat, good work). 
 Great also that I now can provide the token/key for the account instead of the login info. 
 I tried to play a little with the tilecache which improved the performance even more. 
  
 The project I’m currently on is like a map component for a control centre for a bus company. 
 The map is gonna be the main part of the view that the traffic control people have of the current traffic/transport situation. 
 So there’s gonna be alot of zooming and panning in the map.  
 Are there any other tweaks that I might have missed that can enhance the experience more? 
  
 It’s a bother that Microsoft hasn’t yet implemented the DeepZoom functionality in WPF. 
  
 We’ve implemented some previous Silverlight solutions with deepzoom. You can for instance take a look at:  
 kongo.swecosundsvall.se/kvarken2/ 
  
 This gives a very smooth experience when zooming and panning the map. And that is what I’m really want. 
 Is it possible currently to get that kind of performance/experience with the background map in the WPF desktop component? 
  
 (Actually I think with some polishing you could get almost similar appearance in your component. If no white backrounds were shown for instance when refreshing. I do also have the bing copyright “logo” on each tile which looks a bit annoying in a larger map. Can this be removed?) 
  
 Thanks for your great help though. I’m really impressed with your servicemindedness and professionalism. 
  
 Best regards 
 /Magnus 
  
  
  


Hi Magnus, 
  
 Thanks for your feedback.  
  
 I saw your sample and it’s pretty cool. Actually, MultiScaleImage is a good control; it only needs few code to implement the deep zoom effect if you have a web service. It has already has the fade in/out effect etc.  
  
 Before we develop this product, we did a lot of research on the deep zoom. The more we use it, the more things we cannot implement with this control. For example, You know this control has some limits such as the scale of the server mush be two times smaller than the previous scale. Also the with and height of the actual image needs to be square something. These limits are the factor to prevent our developing the common scenarios. 
  
 Also, we used to implement a Silverlight Version with drawing the ShapeFiles on the fly. It really cost too much CPU for drawing the extra images. So this effect only fixed for a pre-cached web service just like your sample does. Hope you understand. 
  
 I think when I get more time, I’ll did more work on this deep zoom and get it better and better. 
  
 For your another issue, it’s possible to cut the logo out, but I’m not sure if it’s legal. I’ll check their documents and let you know then. 
  
 Thanks, 
 Howard

Where I think you guys could add a lot of value would be to cut the logo from each tile and then display it once in the bottom corner of the entire map in the adornment layer or something like that. Of course i’m not a lawyer but that should make a difference as far as the legality. 
  
 Chris

Hi Chris, 
  
 This is a choice; but you know the logo is stamped on the tile which we request directly from Bing maps imagery server. When you panning around, the logo will go with it. We can keep one logo on these tiles but cannot keep it on one fixed position with the adornment layer. I haven’t got the reply from Microsoft. I’ll let you know then. 
  
 Thanks, 
 Howard

Hello, 
 I am unable to find any of the discussed Bing map layers/overlays in version 4.0.161.0.  Was this taken out?

Ok, I see I was referencing the wrong dll.  Thanks.

Hi Ryan, 
  
 Glad to know your problem is solved. 
 Please feel free to let us know if you have any other questions. 
  
 Regards, 
 Tsui