ThinkGeo.com    |     Documentation    |     Premium Support

Multiple Google overlays and the code api key !?

Hi,


I'm trying to set up a map with two Google overlays, one of type "Normal" and one of type "Satellite". I want to switch between them in the overlay switcher.


All works well when I debug it, but when I publish the solution to a server, and run it, it prompts me for a required Google code api key. Fine, I've generated one such.


However, when I add the same key to both layers, the solution throws an exception:


System.ArgumentException: An item with the same key has already been added.


When I run the second layer without the api key, it prompts me for it, and doesn't show the overlay switcher.


Please advise.


--


Lars



Small correction: it errs the same way in debug with both layers being given the code api key. 
  
 It doesn’t err when one or both layers are without the code api key. 


 


Hi, Lars I,
I guess there are some problems when you set the identifier string of the GoogleOverlay. You need to specify different ones. So your codes should be like the one below:
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                Map1.CurrentExtent = new RectangleShape(-13939426.6371, 6701997.4056, -7812401.86, 2626987.386962);
                Map1.MapUnit = GeographyUnit.Meter;
 
                Map1.MapTools.OverlaySwitcher.Enabled = true;
 
                GoogleOverlay google = new GoogleOverlay("Google Map");
                google.GoogleMapType = GoogleMapType.Normal;
                google.JavaScriptLibraryUri = new Uri(ConfigurationManager.AppSettings["GoogleUri"]);
 
                GoogleOverlay google1 = new GoogleOverlay("Google Map1");
                google1.GoogleMapType = GoogleMapType.Satellite;
 
                Map1.CustomOverlays.Add(google);
                Map1.CustomOverlays.Add(google1);
 
Thanks,
Khalil

Hi Khalil, 
  
 I used the “Name” property instead to name the overlays differently, but changing my code to something similar to the above doesn’t solve my issue with the Google Maps API code. 
  
 If not done in the creation of the GoogleOverlay (I mistook the “Id” to mean the api code), where does one insert this API code ? 
  
 As I wrote, it works without this code in debug, but not when published to a production webserver. 


My source code is basically as follows:



Map1.MapUnit = GeographyUnit.Meter

Dim g1 As New GoogleOverlay("Google Normal")
g1.IsBaseOverlay = True
g1.IsVisible = True
g1.GoogleMapType = GoogleMapType.Normal
g1.IsVisibleInOverlaySwitcher = True
Map1.CustomOverlays.Add(g1)

Dim g2 As New GoogleOverlay("Google Satellite")
g2.IsBaseOverlay = True
g2.IsVisible = False
g2.GoogleMapType = GoogleMapType.Satellite
g2.IsVisibleInOverlaySwitcher = True
Map1.CustomOverlays.Add(g2)

Map1.ZoomTo(New PointShape(1150000, 7500000), 1000000.0)
Map1.Visible = True


Hi again, 



Dug a little deeper into the FAQ for the Google Maps API, and found, that adding a value for "JavaScriptLibraryUri" isn't enough for the solution to run, one also need to manually add this script reference into the header of the HTML file: 




< script src="maps.google.com/maps?file=api&v=2&sensor=false&key=..." type="text/javascript" > < /script >
 

And I also fell into the additional pitfall of key scope, needing to generate a separate key for each sub site (SUB.domain.org), as the generated key for the generic site name (domain.org) doesn't cover sub sites !!! 



Very cumbersome indeed :-(   Definitely a worthy topic for the Wiki.



 


Hi, Lars I
In fact, users don’t need to add the script reference manually and we have provided the related API for that. The JavaScriptLibraryUri property is just used for it. Please refer to the codes in the preview post of mine.
As for the Google Maps APIs key, I suggest that you refer to the web page below which has clarified how to register the key and make it valid for that domain, its subdomains, all URLs on hosts in those domains.
code.google.com/apis/maps/faq.html#keysystem
Thanks,
Khalil