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

google maps - Grundfragen

Tanja

Neues Mitglied
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?
:?::?:
 
Werbung:
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.
 
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 ;-)
 
Werbung:
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.
 
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....
 
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
 
Werbung:
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
 
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:
Werbung:
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>
 
Zurück
Oben