3 Stimmen

Programmatisch Google Maps-Marker generieren (API v3)

Ist es möglich, Marker programmgesteuert in Google zu generieren? Zum Beispiel habe ich eine Datenbank von Diensten und Standorten, die ich mit PHP auf einer Google Map plotten möchte.

Unter Verwendung der Maps API v3 habe ich eine Karte erstellt und die Dienste erfolgreich mit Markern und Info-Fenstern dargestellt, aber was ich wirklich tun möchte, ist Zahlen (1,2,3,4... etc.) in den Standard-Markerblasen basierend auf der Reihenfolge generieren, in der sie aus der Datenbank abgerufen werden. Außerdem möchte ich die Farbe des Marker-Symbols basierend auf dem Diensttyp in der Datenbank programmgesteuert ändern.

Ich verwende PHP, daher weiß ich nicht, ob es einen Skript gibt, um dies zu tun, aber ich hatte gehofft, dass Google diese benutzerdefinierte Marker-Generierung über die API bereitstellen würde.

5voto

plexer Punkte 4382

Die Maps API erfordert, dass Sie ein Bild (statt einem beliebigen DIV) verwenden, um Marker anzuzeigen. Daher müssen Bilder serverseitig gerendert werden.

Ein einfacher Weg dies zu tun, ist die Verwendung der Google Charts API zum Rendern von Marker-Symbolen: http://code.google.com/apis/chart/docs/gallery/dynamic_icons.html#pins

Beispieloutput: alt text

Generiert mit: https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=C|FF0000|000000

4voto

Adam Benzan Punkte 524

Lassen Sie PHP Javascript-Code ausspucken.

Hier ist eine kleine praktische JavaScript-Funktion, die ich geschrieben habe, um einen Marker mit einem zugehörigen Fenster hinzuzufügen.

function add_marker(opts, ort) {
  var marker = new google.maps.Marker(opts);
  marker.place_id = ort.id;
  markers[ort.id] = marker;
  var infowindow = new google.maps.InfoWindow({
    content: ort.details
  });

  infowindows[ort.id] = infowindow;

  google.maps.event.addListener(marker, 'click', function() {
    infowindows[marker.place_id].open(map,marker);
  });

 }

Also, nachdem Sie das an einer "Javascripty" Stelle deklariert haben, würden Sie dann wahrscheinlich etwas PHP haben, das wahrscheinlich so aussieht (und unter der Annahme, dass Ihre Karte global 'map' heißt):

  <?php 
  $count = 0;
  foreach ($rowset as $row): ?>
  add_marker({
        position: new google.maps.LatLng(<?php echo $row->lat ?>, <?php echo $row->lng ?>),
        title:<?php echo $row->title ?>,
        map:map
    }, { id:'<?php echo $count ?>', details:'<?php echo $row->details ?>' });
  <?php 
  $count++;
  endforeach; ?>

Ich habe nichts davon getestet, noch habe ich eine Vorstellung davon, wie die Daten aussehen, aber diese Methode sollte für das, was Sie wollen, funktionieren. Ich bin mir nicht zu 100% sicher, was Sie mit benutzerdefinierter Marker-Generierung meinen, denn es hört sich so an, als würden Sie das bereits machen, nur nicht über PHP.

0voto

Dan Hanly Punkte 7739

Ich bin mir nicht sicher, ob jemand anderes dieses Problem hatte, aber ich konnte keinen Geocode schleifen, um meine Punkte zu plotten, und Google betrachtet dies sogar als Missbrauch ihres Dienstes. Also war meine Methode, die Geocodierung durchzuführen und die Breiten-/Längenkoordinaten bereits in der Benutzereingabe zu speichern, anstatt dies im Anzeigestadium zu tun, um den Bandbreitenstress zu lindern, den Google verursacht.

Ich bin mir nicht sicher, ob Ihnen das hilft, aber es könnte Ihnen vielleicht helfen, diese Markerbilder vorab zu codieren und zu speichern, anstatt es direkt zu tun. Wie es mit Ihrer gewählten Antwort aussieht, sind Sie darauf angewiesen, dass Google diese Bilder produziert, während Ihre Seite lädt. Vielleicht möchten Sie Ihren Service beschleunigen, indem Sie diesen Code in einem anderen Stadium ausführen und das Ergebnis mit den Koordinaten in Ihrer PHP-Datenbank speichern.

Prost,

Dan

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X