• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

GoogleMaps API

goldensurfer

Geoguru
Hi,
weiß nicht ob das hier das richtige Forum ist... Google Maps API? Ich versuch's mal :D
Auf der GoogleMaps-Seite steht, man kann die GoogleMaps API nutzen, muss sich aber kostenlos registrieren und bekommt dann einen Schlüssel generiert, den man den GoogleMaps-Aufrufen als Parameter anhängen muss. Der Schlüssel ist auf eine bestimmte, bei der Registrierung angegebene Website beschränkt.
Funktioniert alles; es funktioniert sogar, wenn man den Key einfach weg läßt (zumindest wenn ich die Datei lokal speichere und dann vom Filesystem aus aufrufe). Wofür braucht man den Key dann eigentlich?

Ach ja, wenn das ein Thema von allgemeinem Interesse ist, kann ich auch gern mal den Code hier posten. Ist nicht viel, so ca. 80 Zeilen, plus eine kleine XML-Datei. Das Programm zeigt eine GoogleMap und stellt darin die in der XML-Datei hinterlegten Geocaches mit Zusatzinformationen dar :D
 

hcy

Geoguru
goldensurfer schrieb:
Funktioniert alles; es funktioniert sogar, wenn man den Key einfach weg läßt (zumindest wenn ich die Datei lokal speichere und dann vom Filesystem aus aufrufe). Wofür braucht man den Key dann eigentlich?

Wenn Du die Datei nicht mehr lokal speicherst wird der Key geprüft. Wenn Du den für Domain xyz.tld registriert hast und rufst die Karte von Domain abc.tld ab kriegst Du einen Fehler.

Was Google genau damit macht ist mir aber auch nicht so ganz klar.
 
OP
goldensurfer

goldensurfer

Geoguru
hcy schrieb:
Was Google genau damit macht ist mir aber auch nicht so ganz klar.

Naja, die werden halt auswerten, woher Du kommst - das geht ja auch zur Erstellung von Webstatistiken. Geht halt nur wenn der Client JavaScript aktiviert hat, aber ohne JavaScript geht ja auch kein Ajax - insofern haben die es da leicht...

Danke für den Hinweis. Da ich es nur lokal verwende, schenke ich mir einfach mal die Sache mit dem Key :wink:
 

pathfinder

Geocacher
Google möchte halt ne Menge über Leute erfahren ....

Aber im Ernst, der Key macht schon Sinn, wenn sie Missbrauch verhindern wollen. Z.b. wenn Firmen GoogleMaps für ihren eigenen Service gebrauchen oder Intranet-Dienste aufbauen (die sind kostenpflichtig). Z.b. sind max. 50000 Geocode-Requests pro Key und Tag möglich. Irgendwie muss sich Google ja auch finanzieren.
 
goldensurfer schrieb:
Danke für den Hinweis. Da ich es nur lokal verwende, schenke ich mir einfach mal die Sache mit dem Key :wink:

Die lokale Verwendung ist nach den Copyrights von GM verboten.

Warum sie diese Möglichkeit noch nicht gekillt haben, liegt wohl daran, das sie sonst Probleme bekommen mit den Entwicklern, die an einer dynamischen IP hängen.

KDB
 
OP
goldensurfer

goldensurfer

Geoguru
Da ich per Mail nach dem Code gefragt wurde, poste ich den mal hier - so können sich auch andere "bedienen" ;)

Der Code besteht aus zwei Dateien: gmshow.html und caches.xml:

Die Datei gmshow.html:

Code:
!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Maps Cacheliste</title>

  <style type="text/css" media="screen">  </style>
    <script src="http://maps.google.com/maps?file=api&v=2&key=" type="text/javascript"></script>
    <script type="text/javascript"> 
    //<![CDATA[

    function load() {
      if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());  //Zoom (Plus/Minus), Zoom-Einsteller und Pfeiltasten
        map.addControl(new GMapTypeControl());   //Umschaltbuttons fuer die Kartenarten
        map.addControl(new GScaleControl());     //Kontrollelement fuer Masstab
        map.setCenter(new GLatLng(49.467, 10.979), 11); //Zoom i.d.R.=14

        function createTabbedIconMarker(point, symbol, hl1, tx1, hl2, tx2) {
          var infoTabs = [ new GInfoWindowTab(hl1, tx1),
                           new GInfoWindowTab(hl2, tx2) ];
          var marker = new GMarker(point, symbol);
          GEvent.addListener(marker, "click", function() { marker.openInfoWindowTabsHtml(infoTabs); } );
          return marker;
        }
        
        function toDM(dec) {
          d = parseFloat(dec);
          m = Math.round((d - Math.floor(d)) * 60000) / 1000;
          d = Math.floor(d);
          return d + "° " + m + "′";
        }  
        
        GDownloadUrl("caches.xml", function(data, responseCode) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          var icons = new Array();
          for (var i=1; i<=9; i++) {
            icons[i] = new GIcon();
            icons[i].iconSize = new GSize(16, 16);
            icons[i].iconAnchor = new GPoint(8, 8);
            icons[i].infoWindowAnchor = new GPoint(8, 8);
          }
          icons[1].image = "http://www.geocaching.com/images/wpttypes/sm/2.gif"; //tradi
          icons[2].image = "http://www.geocaching.com/images/wpttypes/sm/3.gif"; //multi
          icons[3].image = "http://www.geocaching.com/images/wpttypes/sm/4.gif"; //virtual
          icons[4].image = "http://www.geocaching.com/images/wpttypes/sm/5.gif"; //letterbox
          icons[5].image = "http://www.geocaching.com/images/wpttypes/sm/6.gif"; //event
          icons[6].image = "http://www.geocaching.com/images/wpttypes/sm/8.gif"; //myst
          icons[7].image = "http://www.geocaching.com/images/wpttypes/sm/11.gif"; //webcam
          icons[8].image = "http://www.geocaching.com/images/wpttypes/sm/13.gif"; //cito
          icons[9].image = "http://www.geocaching.com/images/wpttypes/sm/earthcache.gif"; //earth
                    
          for (var i = 0; i < markers.length; i++) {
              var kstr = "N" + toDM(markers[i].getAttribute("lat")) + ' E' + toDM(markers[i].getAttribute("lng"));
              var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), 
                                      parseFloat(markers[i].getAttribute("lng")));
              map.addOverlay(createTabbedIconMarker(point, icons[parseInt(markers[i].getAttribute("icon"))], 
                             "Name", 
                             "<p>" + markers[i].getAttribute("wpt").replace(/\[/g, "<").replace(/\]/g, ">") + "</p>", 
                             "Zusatzinfo", 
                             "<p>Koord.: " + kstr 
                             + "<br>Diff./Terr.: " + markers[i].getAttribute("diff") + " / " + markers[i].getAttribute("terr") 
                             + "<br>Cachegröße: " + markers[i].getAttribute("size")
                             + "</p>"));
          }
       });
      }
    }
        //]]>
    </script>
  </head>
  <body onload="load()" onunload="GUnload()">
    <table border="1">
      <tr><td><b>Karteninformationen</b><br>Folgende 3 Caches befinden sich in der Arbeitsliste:</td></tr>
      <tr><td><div id="map" style="width: 640px; height: 480px"></div></td><tr>
    </table>
  </body>
</html>

Die Datei caches.xml ist die Datei, die die Caches enthält, die auf der Karte dargestellt werden sollen.
Wichtig sind natürlich lat und lng für die Koordianten. Die anderen Infos sind die Daten, die in der Sprechblase angezeigt werden, wenn man auf einen der dargestellten Caches klickt.
Beispielhaft hier also noch eine caches.xml mit drei Einträgen:

Code:
<markers>
<marker lat="49.42887" lng="11.01990" wpt="[b]GC13NH5[/b][br]Sued-West-Park Nuernberg by y_o_d_a" icon="1" diff="1" terr="1" size="Small"/>
<marker lat="49.50547" lng="10.90337" wpt="[b]GC11ZYW[/b][br]Pokemons in Franken III Bibor by BaSy" icon="2" diff="3" terr="3" size="Small"/>
<marker lat="49.48948" lng="11.05438" wpt="[b]GC13K9N[/b][br]dreegsau - odlfooss by dreegsau" icon="1" diff="1" terr="1" size="Small"/>
</markers>

Viel Spaß beim rumspielen!
 
Oben