Portal > Foren > Ausschreibungssprachen und clientseitige Programmierung > JavaScript und AJAX > [Google Maps API] Problem mit map.addOverlay()
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 19.01.2009, 11:59 Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard [Google Maps API] Problem mit map.addOverlay()

Hallo,
ich mache gerade meine ersten Schritte mit der Google Maps API und habe ein Problem.

Folgender Code

index.php
Standardseite. Ausgelagerte JS-Funktionen und Kartendaten.
PHP-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 JavaScript API Example</title>
    <
script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAalHnu7QjfveVbJVF-u4o2BT2mIp-oY-0zSNG68CWvho_oB_0txSf-adCIStIHhdkgb-DGjePYAWkpg"
      
type="text/javascript"></script>
    <script src="js/google_map_data.php" type="text/javascript"></script>
    <script src="js/google_map_functions.js" type="text/javascript"></script>
  </head>
  <body>
    <div id="city_map" style="width:500px;height:300px"></div>
  </body>
</html> 

google_map_data.php
Ich lese aus einer DB-Tabelle einige Städte mit Namen, Längen- und Breitengrad, sowie einer Beschreibung aus.

Die Datei enthält letztlich die Daten der Orte, die auf der Karte angezeigt werden sollen.
PHP-Code:
<?php

// Mit der Datenbank verbinden
require_once('../../lib/db_connect.php');

$sql "SELECT id, latitude, longitude, name, description
          FROM cities"
;

$res mysql_query($sql) or exit(mysql_error());

$cities = array();

while( 
$city mysql_fetch_assoc($res) ) {
    
    
$cities[$city['id']] = array(
        
'latitude'  => $city['latitude'],
        
'longitude' => $city['longitude'],
        
'name'      => $city['name'],
        
'desc'      => $city['description'],
    );

}

echo 
"var cities = [" ."\n";

$i 1;
$num count($cities);

foreach( 
$cities as $city ) {
    
    echo 
"{" ."\n";
    
    echo 
"'latitude' :  ".$city['latitude'] .","  ."\n"
    echo 
"'longitude':  ".$city['longitude'].","  ."\n";
    echo 
"'name'     : '".$city['name']     ."'" ."\n";
    
//echo "'desc'     : '".$city['desc']     ."'"  ."\n";
    
    
if( $i $num ) {
        echo 
"}," ."\n";        
    } else {
        echo 
"}" ."\n";
    }
    
    
$i++;
}

echo 
"];";

?>

var centerLatitude  = 50.4419; 
var centerLongitude = 8.478032;
var startZoom = 6;
google_map_functions.js
Enthält die Funktionen, die mir die Karte so anzeigen, wie ich das gerne hätte.
PHP-Code:
var map;


function 
addMarker(latitudelongitudedescription) {

    var 
marker = new GLatLng(latitudelongitude);
    
    
GEvent.addListener(marker'click',
        function() {
            
marker.openInfoWindowHtml(description);
        }
    )
    
    
map.addOverlay(marker);
}


function 
init() {

  if (
GBrowserIsCompatible()) {
    
    var 
map = new GMap2(document.getElementById("city_map"));
    
    
// kleines Navigationselement links oben einfuegen
    
map.addControl(new GSmallMapControl());
    
    
// location erstellen, um diese wiederverwenden zu koennen
    
var location = new GLatLng(centerLatitudecenterLongitude)
    
    
// Karte an der Startposition zentrieren 
    
map.setCenter(locationstartZoom);
    
    for( 
id in cities ) {
        
addMarker(cities[id].latitudecities[id].longitudecities[id].description);
    }
    
    
  }
}

window.onload init;
window.onunload GUnload

Jut, Fehler ist, dass mir der Marker nicht angezeigt wird.
Beispiel:
Code:
var cities = [
{
'latitude' :  52.526248,
'longitude':  13.41156,
'name'     : 'Berlin'
}
];
Die Fehlerkonsole sagt mir, dass die Variable "map" nicht definiert ist, aber eigentlich sollte da doch ein Objekt vom Typ GMap2 drin sein, oder?

Danke für die Hilfe. (Ist wahrscheinlich recht simpel .. )
__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.01.2009, 08:03 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Code:
<script type="text/javascript">

var map;
var marker;

var centerLatitude  = 50.4419;
var centerLongitude = 8.478032;
var startZoom = 6;

function addMarker(latitude, longitude, description) { 
	marker = new GLatLng(latitude, longitude);
	GEvent.addListener(marker, "click", 
		function() { 
			marker.openInfoWindowHtml(description); 
		} 
	);
	map.addOverlay( new GMarker(marker) );
}

function load() {
	map = new GMap2(document.getElementById("map"));
	map.addControl(new GSmallMapControl()); 
	var location = new GLatLng(centerLatitude, centerLongitude);
	map.setCenter(location, startZoom);
	addMarker(centerLatitude, centerLongitude, 'test');
}

</script>
Der Maker wird zwar angezeigt, aber leider dieses sch... openInfoWindowHtml() nicht.
Du hast bei dir new GMarker() vergessen ...
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.01.2009, 07:33 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 696
Standard

Hmmm, hat sich etwas neues ergeben oder ist man abgestorben ?
:)
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.01.2009, 10:57 Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Koblenz
Beiträge: 4.794
Standard

Konnte es aus Zeitmangel noch nicht austesten. Ich melde mich, wenn ich es getan habe!
__________________
Mehr TuS Koblenz geht nicht ... - TuS Koblenz Forum ... Benjamin Klaile ist noch in der Aufwärmphase
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 10.02.2009, 15:49 Nach oben    #5
Neuer Benutzer
 
Registriert seit: 10.02.2009
Beiträge: 1
Standard

Moin @all,

bin auch API Anfänger und gerade über Google auf diesen Thread gestossen.
Ist zwar schon 2 Wochen alt und wahrscheinlich hast du die Lösung schon ...

Der EventListener erwartet ein anklickbares Overlay, in deiner Funktion werden aber nur Koordinaten übergeben.
So sollte es funktionieren:

Code:
function addMarker(latitude, longitude, description) {

// GLatLng ist ein Punkt, definiert durch die geografische Länge und Breite.
    var latlng = new GLatLng(latitude, longitude);

// Mit dieser Koordinate wird dann das klickbare Overlay erstellt
    var marker = new GMarker(latlng);

    GEvent.addListener(marker, 'click',
        function() {
            marker.openInfoWindowHtml(description);
        }
    )
    
    map.addOverlay(marker);
}
Geschmacksache:

var marker = new GMarker( new GLatLng(latitude, longitude));

tanausu ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:18 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47