google maps - Grundfragen

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Tanja

Neues Mitglied
15 Juli 2012
29
0
1
Ich brauch mal ein paar Fragen beantwortet, weil ich zum ersten mal damit in Berührung komme.

Um google maps einzubinden, brauche ich diese API - richtig?
Für mich kämen zwei Fälle in Betracht:

einmal einen Punkt auf der Karte anzeigen (auf einer einzelnen Seite) z.B. um nur eine Filiale anzeigen zu lassen
mehrere Punkte auf der Karte anzeigen lassen (auch wieder einzelne Seite) um z.B. alle Filialen anzeigen zu lassen
geht das?

Adressen sind in einer (mysql)Datenbank hinterlegt. Reicht das?

Kann ich beinflussen- das wenn keine Adresse hinterlegt ist auch die Karte nicht angezeigt wird?
:?::?:
 

Cheffchen

Senior HTML'ler
21 Oktober 2008
3.155
104
63
Berlin
code.klassentreffen-seelow-92.de
Hallo,

Ja API brauchst, achte darauf das V3 nimmst wenn beispiele im netzt findest.

Das mit den Punkten geht.

Adress alleine in DB ist schlecht, da Google bei jedem aufruf das neu Geocodieren muss.
Was machst wenn die Adresse nicht gefunden wird, so hast immer kein Punkt, besser, neue Spalte mit koordienaten und bei jedem aufruf prüfen wenn die leer nur dann Geocodieren und werte in DB schreiben.
weiterer vorteil, wenn der Punkt dir nicht grefällt weil der genau auf nachbargrundstück/konkorenz ist kannst in der DB einfach die Koordienaten anpassen.

Karte anzeigen ja/nein, mach doch einfach ein abfrage.

Cheffchen

oh sehe gerade das dies in "ASP / Perl / CGI / ActiveX" ist, Maps ist Javascript und DB ist doch PHP, geht aber bestimmt auch anders.
 

Tanja

Neues Mitglied
15 Juli 2012
29
0
1
das ist doch schon mal eine Aussage.

Wie komme ich an diese Geodaten? Gibt es da was spezielles?

Und der Bereich = eher Sonstiges, da null Plan davon. Kann auch verschoben werden ;-)
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.348
299
83
Leipzig
www.comedy-news.de
Geokoordinaten kannst Du ebenfalls über die API abrufen:
https://developers.google.com/maps/documentation/geocoding/

Alternativ kannst Du auch manuell bei GoogleMaps selbst nach der Suche nach einer Adresse die Koordinaten aus der von Google angebotenen Export-URL auslesen.
Eine weitere Alternative wäre die Verwendung einer anderen Kartendatenbank, die ebenfalls Geo-Koordinaten enthält. Z.B. OpenStreetMap. Oder Du nutzt einen GPS-Sender um selbst vor Ort solche Koordinaten zu ermitteln.
 

Tanja

Neues Mitglied
15 Juli 2012
29
0
1
Irgendwie bin ich zu blond dafür.
Für V3 brauche ich keinen API Key, um die Geodaten zu erstellen aber doch? Bekommen kann ich aber wohl keinen mehr? Wenn ich über dieses API-Access gehe - was brauch ich denn da?

Nochmal zusammengefasst: Tabelle mit Anschrift, PLZ, Ort, Land (mal alles vorhanden, mal nicht)
Dazu hätte ich gerne (je nach Datenbankabfrage - z.B. zeig mir alle User über 50 Jahre) die entsprechenden Punkte auf der Karte. Gibt es ein aktuelles Tuturial dazu? Google Developers erschlägt etwas arg....
 

Cheffchen

Senior HTML'ler
21 Oktober 2008
3.155
104
63
Berlin
code.klassentreffen-seelow-92.de
Hallo,

es steht alles in dem Link oben, API Key für Maps gibt es schon lange nicht mehr.
Hier genauer https://developers.google.com/maps/documentation/geocoding/#XML
Jetzt brachst nur noch per xml parser das auslesen was brauchst. Das passiert natürlich alles in PHP.
PHP:
<php
           #Umlaute aus Adresse für Google ändern
      function umlautepas($string){
      $upas = Array("â" => "a", "ä" => "ae", "ü" => "ue", "ö" => "oe", "Ä" => "Ae", "Ü" => "Ue", "Ö" => "Oe","ß" => "ss","á"=>"a","Á"=>"A","é"=>"e","è"=>"e","ê"=>"e","É"=>"E","'"=>"","("=>"",")"=>"","/"=>"", " OT "=>" ","str."=>"strasse ","Str."=>"Strasse ");
      return strtr($string, $upas);
      }

             $xml = simplexml_load_file('http://maps.googleapis.com/maps/api/geocode/xml?address='.urlencode(umlautepas($adresse)).'&sensor=false');
             $latitude = $xml->result->geometry->location->lat;
             $longitude = $xml->result->geometry->location->lng;
             echo "<br>Lat: ".$latitude.", Lon: ".$longitude."<br>";?>
Das mit dein über 50 ist eine normale Datenbank abfrage wo dir dann die Karte zusammen baust und hat nichts mit den geocodieren zu tun.
Ach so die geocodierung solltest dann in die DB Speichern, da Google jeden aufruf und wenn jedesmal 1000 Adressen geocodierst kommst schnell in den kostenpflichtigen bereich.

Cheffchen
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.348
299
83
Leipzig
www.comedy-news.de
API Keys für die Google Map API gibt es auch weiterhin. Sie sind optional, aber Google empfiehlt diese zu verwenden.

Hintergrund:
Google hat eine Grenze für die Geokodierung von Adressen festgelegt. Diese bezieht sich auf die Webseite auf der die Map eingebunden ist. Der API Key erleichtert im Fall einer Abrechnung durch Google die Zuordnung. Zudem kann man darüber auch bei Google eine Statistik einsehen, in der man sieht wieviele Geokodierungen es gab um zu erkennen, ob man in einem Monat oder einem Tag mal an die Grenze kommt.

Siehe auch:
https://developers.google.com/maps/signup
 

Tanja

Neues Mitglied
15 Juli 2012
29
0
1
Irgendwie konnte ich so einen Schlüssel erstellen.
PHP:
require("phpsqlgeocode_dbinfo.php");

define("MAPS_HOST", "maps.google.ca");
define("KEY", "your_google_api_key_here");

// Opens a connection to a MySQL server
$connection = mysql_connect("localhost", $username, $password);
if (!$connection) {
  die("Not connected : " . mysql_error());
}

// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
  die("Can\'t use db : " . mysql_error());
}

// Select all the rows in the wp_realty_listingsdb table
$query = "SELECT * FROM wp_realty_listingsdb WHERE lat LIKE '0.000000'";//Only choose the rows with the default (decimal) 0.000000
$result = mysql_query($query);
if (!$result) {
  die("Invalid query: " . mysql_error());
}

// Initialize delay in geocode speed
$delay = 0;
$base_url = "http://" . MAPS_HOST . "/maps/geo?output=xml" . "&key=" . KEY;

// Iterate through the rows, geocoding each address
while ($row = @mysql_fetch_assoc($result)) {
  $geocode_pending = true;

  while ($geocode_pending) {
    $address = $row["Address"];//these values have to exactly match the column names in your database 
    $city = $row["City"];
    $id = $row["sysid"];
    $state = $row["state"];
    $request_url = $base_url . "&q=" . urlencode($address) . "+" . urlencode($city) . "+" . urlencode($state);
    $xml = simplexml_load_file($request_url) or die("url not loading");

    $status = $xml->Response->Status->code;
    if (strcmp($status, "200") == 0) {
      // Successful geocode
        $counter++;
      $geocode_pending = false;
      $coordinates = $xml->Response->Placemark->Point->coordinates;
      $coordinatesSplit = split(",", $coordinates);
      // Format: Longitude, Latitude, Altitude
      $lat = $coordinatesSplit[1];
      $lng = $coordinatesSplit[0];

      $query = sprintf("UPDATE wp_realty_listingsdb " .
             " SET lat = '%s', lng = '%s' " .
             " WHERE sysid = '%s' LIMIT 1;",
             mysql_real_escape_string($lat),
             mysql_real_escape_string($lng),
             mysql_real_escape_string($id));
      $update_result = mysql_query($query);
      if (!$update_result) {
        die("Invalid query: " . mysql_error());
      }
    } else if (strcmp($status, "620") == 0) {
      // sent geocodes too fast
      $delay += 100000;
    } else {
      // failure to geocode
      $geocode_pending = false;
      echo "Address " . $address . " failed to geocoded. ";
      echo "Received status " . $status . "
\n";
    }
    usleep($delay);
  }
        echo "<br>" .$counter. " addresses updated</br>";//report how many address were geocoded

}
angepasst an meine Daten liefert mir das Teil immer einen Received status 610 zurück, egal ob nur mit Ort oder anders. Wenn ich richtig gegoogelt habe, liegt das am Key....
 
Zuletzt bearbeitet:

Tanja

Neues Mitglied
15 Juli 2012
29
0
1
obigen Code "geradegeschoben" - warum der so verwuschelt war??
Direktaufruf der url ergibt
Code:
<kml><Response><Status><code>610</code><request>geocode</request></Status></Response></kml>
 
Werbung:

Latest posts