ThinkGeo.com    |     Documentation    |     Premium Support

License keys for Bing and Google

We’re enabling our customers to use Bing Maps and Google Maps in our application through the Map Suite WPF Desktop Edition from ThinkGeo. 


To start using these map services in our application, the ThinkGeo API requires either a Bing Maps key, or for Google Maps a client ID and a private cryptographic key.


To get this information, customers must create a developer account with either Google or Microsoft. For Bing Maps, they can generate the key themselves. For Google Maps, they get the client ID and private cryptographic key in a message from Google. When they generate the information, they must register the application they’ll use the map data in.


There are many different APIs, and both Google and Microsoft offer different plans, so we want to be able to offer at least some basic advice to our partners and customers. This includes the following:



        
  1. Which Google Maps API and Bing Maps API do users need to get a key for?

  2.     
  3. For Bing Maps APIs, you can get a Basic or an Enterprise plan. For Google Maps, you can get a Standard or Premium plan. Does ThinkGeo support both types of plans? It seems like the Basic and Standard plans allow internal use of the API. 

  4.     
  5. What information does Bing Maps and Google Maps require about our application? The user might need to do some legwork before they start to generate the key.


/Morten



Hi Morten, 
  
 1. We just use the static API for Google Map and Bing Map, and we call Google Maps JavaScript API for some version exception WPF. 
 2.  
    For Bing Map, if you don’t want to get limitation for tile request, you should get an Enterprise account, please see this link: msdn.microsoft.com/en-us/library/ff428642.aspx  
    For Google map it looks standard account also get an limitation, you can view the detail in the “Compare Editions” part of this page: google.com/intx/en_uk/work/mapsearth/products/mapsapi.html 
  
 3. I am sorry I am not very sure about what’s information they need, but I think we can find related information in their pages. 
  
 Regards, 
  
 Don

Hi Don 
  
 Thanks for your reply, it helped. 
  
 A follow up question regarding these keys: 
 How do you confirm that they are valid before you start loading a Bing/Google layer? 
  
 For Bing I saw this example in another thread, but is that the best way to do it? I mean how can we know that the url does not change over time? And how to do the same for Google? 
  
  
 try
                {
                    WebRequest request = WebRequest.Create(“dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?&incl=ImageryProviders&o=xml&key=” + yourKey);
                    
                    WebResponse response = request.GetResponse();
                }
                catch (Exception)
                {
isvalid = false;
                } 
 
  
 When the BingMapsOverlay is running it throws an exception when the key is invalid, but I cannot find out how to catch the exception, how do I do that? 
 The exception looks like this: 
  
 An unhandled exception of type ‘System.Net.WebException’ occurred in mscorlib.dll 
  
 Additional information: The remote server returned an error: (401) Unauthorized. 
  
 /Morten

Hi Morten,  
  
 The exception (401) Unauthorized. should be thrown by request.GetResponse(), I think try catch can catch it just like your code. 
  
 If you are using BingMapsOverlay, I think you can set this property: BingMapsOverlay.DrawingExceptionMode = DrawingExceptionMode.DrawException 
  
 That will block the exception been thrown. 
  
 Regards, 
  
 Don

Yes my request.GetReponse code work, but the question was: Is there a better way to do it using ThinkGeo so we do not have to worry about some url to Bing? 
  
 "BingMapsOverlay.DrawingExceptionMode = DrawingExceptionMode.DrawException" does not seem to work, the exception is still thrown and the DrawingException eventhandler does not catch it. 
 Any other way to catch the exception? 
  
 I am using 9.0.0.175.

Hi Morten, 
  
 I am sorry we don’t set any logic to validate user’s key, we can only get the exception and thrown it, so this should be the correct way if you want to validate user’s key. 
  
 For DrawingExceptionMode.DrawException, have you tried to run that not under development environment?  
  
 Regards, 
  
 Don 
  


Yes I have tried to run with and without Visual Studio attached in both debug and release. 



I have made the code as simple as possible but none of the exceptions are send to the event handler: 






var bingOverlay = new BingMapsOverlay("BadKey");

bingOverlay.MapType = BingMapsMapType.Aerial;

bingOverlay.DrawingExceptionMode = DrawingExceptionMode.DrawException;

bingOverlay.DrawingException += BingOverlay_DrawingException;



private static void BingOverlay_DrawingException(object sender, DrawingExceptionTileOverlayEventArgs e)

{

    //Never reached.

}





This should be easy for you to reproduce, do you get any exceptions in the event handler?

I just tried with the BingMapsLayer (instead of the BingMapsOverlay) and it seems to throw the exceptions correctly: 
  
 
var bingLayer = new BingMapsLayer("badKey");
            bingLayer.MapType = BingMapsMapType.Aerial;

            var layerOverlay = new LayerOverlay();
            layerOverlay.Layers.Add(bingLayer);
            layerOverlay.TileType = TileType.HybridTile;
            layerOverlay.TransitionEffect = TransitionEffect.Stretch;
            layerOverlay.DrawingExceptionMode = DrawingExceptionMode.DrawException;
            layerOverlay.DrawingException += BingOverlay_DrawingException;
            
            wpfMap.Overlays.Add("BingLayer", layerOverlay);
 
  
 So it must be a bug in BingMapsOverlay, can that be fixed? 
  
 And while we are at it there is also another bug in BingMapsOverlay that does not seem to be present in BingMapsLayer. In BingMapsOverlay when you pan and zoom tiles are often shown as "No image available" and you need to zoom in/out to make them go away. Can that be fixed?

Hi Morten,  
  
 Yes you’re right, it looks the BingMapsOverlay’s exception logic need be enhancement here, I will let our developer knows that and if they fixed it I will let you know. 
  
 For a workaround, you can override the function DrawTileCore for BingMapsOverlay and add excpetion handle logic for it. 
  
 Regards, 
  
 Don

Hi Don 
  
 Looking forward for a possible fix for exceptions in BingMapsOverlay. 
  
 Did you notice the second bug/problem I mentioned: 
 " 
 And while we are at it there is also another bug in BingMapsOverlay that does not seem to be present in BingMapsLayer. In BingMapsOverlay when you pan and zoom, tiles are often shown as "No image available" and you need to zoom in/out to make them go away. Can that be fixed? 
 " 
  
 /Morten

Hi Morten, 
  
 For the drawing exception problem, I should test incorrect version before. Today I can get the exception in debug mode with the latest version. I will build a simple sample tomorrow for that to see whether that can work well in your side. Please wait my update here. 
  
 For the second question, our developer mentioned:  We just draw the “No Image” watermark when the request is OK but doesn’t contain any stream. 
  
 That means this should be a network response issue, but I hand’t met that before, you can tried to modify the property TimeoutInSeconds to see whether that disappear. 
  
 Regards, 
  
 Don

I tried changing TimeoutInSeconds all the way to 30 but it has no effect at all.

In both BingMapsOverlay and BingMapsLayer they are 0 if you do not change it.

But BingMapsLayer seems to work so there must be some other difference.



In general the performance of BingMapsOverlay is much better then BingMapsLayer so it would be nice if it worked (both with the missing exceptions and with the No Image problem).



I have attached a few images to show the problem of No Image being shown. It just requires a bit of scrolling and panning and it happens. The only TileType where it does not happen is SingleTile.









Hi Morten,  
  
 Thanks for your screen shots, that’s very strange. Because in WPF the BingMapsOverlay is only a wrapper for BingMapsLayer, only in web and mvc edition they are implemented in different way. 
  
 And the No Image Available is thrown by BingMapsTile class which is work in BingMapsLayer. 
  
 I think maybe I need to find what’s the property setting by BingMapsOverlay for BingMapsLayer. And have you closed all the cache when you are using BingMapsOverlay ? 
  
 Regards, 
  
 Don

Not sure what you mean by "closed all the cache" but when I try using either BingMapsLayer or BingMapsOverlay it is in a new instance of a small program.  
 This means that I start one program, test BingMapsLayer, close that program. 
 Start another program, test BingMapsOverlay, close that program. 
  
 And I use all different parts of the world when reproducing the problem.

Hi Morten, 
  
 Because I hadn’t get all of your code, so my “close all the cache” is means if you opened cache in your code, maybe cause this problem if the No Image tile cached. If you hadn’t use cache in code, please ignore it. 
  
 So are you just use the simplest code to reproduce that like you code you paste before? 
  
 var bingOverlay = new BingMapsOverlay(“Key”); 
 bingOverlay.MapType = BingMapsMapType.Aerial; 
  
 If possible, please upload your simplest test project, I can run that in my end to see whether I can reproduce that. 
  
 Regards, 
  
 Don 


I have made the simplest possible project with BingMapsOverlay.

In the code i have included the problem that exceptions does not work for BingMapsOverlay!

As mentioned earlier in this thread that is also a big reason why BingMapsOverlay currently cannot be used.



Insert your own key in MainWindow.xaml.cs.



In order to reproduce trye to pan and zoom a lot and from time to time you will see these “No Image” OR just white blank tiles.

Note that if you update by e.g. panning away from the “broken” tile then it will update correctly.

The white blank tiles will happen more often then the “No Image” tiles.



Note that since this is a very small application that does nothing else it is more difficult to reproduce the problem.




BingTest.zip (8.55 KB)

Hi Morten, 
  
 Thanks for your sample, our developer will try to reproduce the no image issue based on your project, any update I will let you know. 
  
 Regards, 
  
 Don

Any news on the exception handling that did not work in BingMapsOverlay? 
  
 It is some time since it was reported and it is really the biggest reason why not to use BingMapsOverlay at the moment.

Hi Morten,  
  
 I think the BingMapsOverlay issue had been fixed, you can get that in our development version 9.0.228.0 or higher version. 
  
 Regards, 
  
 Don

Today I tried to get the production version 9.0.0.230 and exceptions still does not work with BingMapsOverlay. 
  
 I know you wrote that it was only in the development version some days ago but is there any chance that it will make it into a production version soon?