PROBLEM: Track wird bei Google Map nicht angezeigt

sven-ber

New member
Hyho liebe Community,

Ich bin gerade am Verzweifeln, weil mein Track auf der Google Map nicht angezeigt wird. Der Compiler gibt keine Fehlermeldung zurück also muss es wohl ein logischer Fehler sein.

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<?
include('midpoint_casher.php');
include('track_casher.php');
$numpoints = sizeof($coortrack);
$row="#FFFF00";
?>
<HEAD>
<script src="http://maps.google.com/maps?file=api&v=2.x&key=***"       type="text/javascript"></script>
<style type="text/css">
v\:*    {      behavior:url(#default#VML);    }
</style>
<script type="text/javascript">
//<![CDATA[
function load() {
 if (GBrowserIsCompatible()) {

  var map = new GMap2(document.getElementById("map"));
  var lat = <? echo "$coordinates[0]"; ?>;
  var lng = <? echo "$coordinates[1]"; ?>;
  map.setCenter(new GLatLng(lat, lng), 10);
  map.addControl(new GLargeMapControl());
  map.addControl(new GScaleControl());
  map.addControl(new GMapTypeControl());
  map.setMapType(G_SATELLITE_TYPE);
  map.enableScrollWheelZoom();

var points = [];

<?
for($i=0; $i<=(count($coortrack)-1); $i++){
//echo "alert(" . $i . ");";
echo "points[" . $i . "]=\"(". $coortrack[$i][0] .", ". $coortrack[$i][1] .")\";";
}
?>
alert(points[0]);

map.addOverlay(new GPolyline(points));
 }
}
//]]>

</script>
<TITLE> Google Map </TITLE>
</HEAD>

<BODY leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="load()">
<div id="map" style="width:100%; height: 100%;"></div>

</BODY>
</HTML>
Mit Hifle von PHP habe ich die Koordinaten-Punkte in einer anderen Seite aus einer Datenbank aus gelesen und im Array $coortrack[][] gespeichert. Anschließend übermittle ich dem Array var points diese Koordinaten.
PHP:
var points = [];

<?
for($i=0; $i<=(count($coortrack)-1); $i++){
//echo "alert(" . $i . ");";
echo "points[" . $i . "]=\"(". $coortrack[$i][0] .", ". $coortrack[$i][1] .")\";";
}
?>
Zum Schluss sollte der Track mit dem Befehl map.addOverlay(new GPolyline(points)); nur noch angezeigt werden, aber das tut es nicht. Nur WARUM???

Könnt ihr mir dabei etwas weiterhelfen?

Gruß, sven-ber
 
Der Compiler gibt keine Fehlermeldung zurück also muss es wohl ein logischer Fehler sein.

PHP:
var points = [];

<?
for($i=0; $i<=(count($coortrack)-1); $i++){
//echo "alert(" . $i . ");";
echo "points[" . $i . "]=\"(". $coortrack[$i][0] .", ". $coortrack[$i][1] .")\";";
}
?>
alert(points[0]);
Zum Schluss sollte der Track mit dem Befehl map.addOverlay(new GPolyline(points)); nur noch angezeigt werden, aber das tut es nicht. Nur WARUM???

Der Grund ist, dass dein "points"-Array mit String-Werten gefüllt ist. Die Methode GPolyLine jedoch erwartet ein Array mit Werten vom Typ GLatLng.

Bsp: Google Maps API Documentation

Deine PHP-Schleife für das Schreiben des Javascript-Arrays müsste dann so aussehen:

Code:
for($i=0; $i<=(count($coortrack)-1); $i++){
echo "points.push( new GLatLng(".$coortrack[$i][0]." , ". $coortrack[$i][1] ."));";
}

Das sollte eig. funktionieren. Habe es aber nicht getestet!

Grüße aus Sachsen, Ralf...

PS: Falls dein $coortrack noch nicht sortiert ist musst du das noch tun. Siehe das Bsp.im gegebenen Link.
 
Zuletzt bearbeitet:
Hallo daWonderer,

Code:
var points = [];
<?
$bis=count($coortrack)-1;

for ($i = 0; $i <= $bis; $i++) {  
//echo "alert(" . $i . ");";
echo "points.push( new GLatLng(".$coortrack[$i][0]." , ". $coortrack[$i][1] ."));";

} ?>
Damit funktioniert es auch nicht ... Nun bringt er eine Fehlermeldung von wegen unerwarteter Zugriff.

Warum müssen die sortiert werden? ... Dürfen sich die Pfade nicht überschneiden?
 
Nun bringt er eine Fehlermeldung von wegen unerwarteter Zugriff.

Kannst du das Problem genauer beschreiben und evtl. einen Link hier reinstellen?

Warum müssen die sortiert werden? ... Dürfen sich die Pfade nicht überschneiden?

Ein Pfad geht von Punkt zu Punkt. Dabei muss eine Reihenfolge eingehalten werden. Ansonsten kann es sein, dass man zu einem entfernteren Punkt verbindet und von dort wieder zurück.
 
Google Map

Ich habe das bis jetzt mit IE getestet ... nicht Firefox funktioniert es aber auch nicht.

Wie oben schon beschrieben versuch ich im ersten Schritt das php-Array in ein javascript umzuwandeln. Das funktioniert auch .. es wird jedenfalls ein Eintrag ausgegeben.
Das Problem ist halt dass die Funktion new GPolyne() dieses Array nicht annimmt.

Ich hab gerade gelesen dass die Punkte Floats sein müssen ... Vielleicht kann ich diese einfach in Floats umwandeln ...
 
Ich habe gerade den Wert der Punkte in Floats umgewandelt
PHP:
var points = [];
<?
$bis=count($coortrack)-1;

for ($i = 0; $i <= $bis; $i++) {  
//echo "alert(" . $i . ");";
echo "points.push( parseFloat(new GLatLng(".$coortrack[$i][0]." , ". $coortrack[$i][1] .")));";

} ?>

alert(points[0]);
map.addOverlay(new GPolyline(points));
Aber irgendwie gibt das Programm für points[0] nur noch "NaN" aus ... Fehlermeldungen sind auch keine angekommen aber trotzdem fehlt der Track.
 
Ich habe gerade deinen Link mit Firefox geöffnet und bei mir war der Pfad zu sehen. Jedoch hattest du gerade das parseFloat nicht drin.
Jetzt hast du es wieder drin und es geht nicht mehr...
Wenn du das parseFloat weglässt funktioniert es!
Falls doch nicht versuche mal eine Minimal-Konstruktion mit nur 2 Punkten.

Im Opera funktioniert es auch. Seltsamerweise kommt aber auch im IE keine Fehlermeldung.:confused:
 
Stimmt in Mozilla funktioniert es ... er zeigt aber in IE eine Fehlermeldung an.

An solchen Kleinigkeiten hänge ich mich immer auf^^ ... Bei letzten Malen musste ich einfach ein paar Anführungsstriche und Klammern setzen ... mal sehen ob es jetzt auch funktioniert^^.
 
Ja klar ...

demnach soll der Fehler in der Zeile 30 sein. Also müsste der Fehler bei
map.addControl(new GMapTypeControl());
liegen ... nur wo soll dort der Fehler sein???
 
Zum Testen kannst du ja mal die ganzen Control-Sachen auskommentieren und sehen ob immer noch ein Fehler auftritt. Evtl. hat der IE ein Problem mit einem der Google-Map-Controls...
 
Ich habe das Problem lokalisiert:
Der Fehler liegt bei ..
map.addOverlay(new GPolyline(points,"#FFFF00",6,1.0));

gibt es dafür noch eine andere Schreibweise?
 
Im IE wird der Code auf jeden Fall nicht vollständig ausgeführt.
Die alert-Anweisungen wird gar nicht erreicht.
Ändere mal bitte points = []; in points = new array();
Dann nimm noch map.setCenter() raus.
Die Minimal-Konfiguration müsste doch irgendwann funktionieren.
 
Hab den Fehler endlich gefunden:
Der Script war völlig korrekt. Allerdings hat eine Zeile gefehlt^^
<HTML xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">

Nur damit scheint IE diese Linie zu zeichnen ...

_______________________________________________________
zwei tage und eine nacht für eine Linie ... das ist echt traurig^^

Vielen Danke für deine Unterstützung ...

sven-ber
 
Okay, so ähnlich ist der HTML-Tag ja auch im Bsp. Ich habe dieses gleich genommen und nur das Script abgeändert. Dadurch hatte ich diesen Fehler umgangen ;-)
 
Zurück
Oben