• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Problem mit der Google Map API

pholzi

New member
Moin, moin,
dieses ist hier mein erster Eintrag und möchte mich erst einmal vorstellen. Ich bin der Peter und komme aus dem hohen Norden von der Ostsee aus dem Ort Damp.
Ich habe eine Googlemap, die mir per GPS den aktuellen Standort auf der Map korrekt anzeigt. Ich zeichne mehrere Marker in diese Map ein und verbinde diese Marker mit einer Polyline. Soweit ist alles gut und korrekt mit dem JavaScript.
Nun verschiebe ich den Marker, möchte aber, dass die Polyline sich automatisch mit verschiebt. Marker lässt sich verschieben, aber die Polyline bleibt auf der alten Position. Kann mir hier jemand einen Tip geben, wo ich nachlesen kann, wie das funktioniert? In der Beschreibung zur Google Map API finde ich nichts.

Peter
 
Zuletzt bearbeitet von einem Moderator:
Guten morgen,
hier mein Code:

HTML:
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<title> GESR-AirControl (c) Peter Holzknecht </title>
<style type="text/css">
    .labels
    {
        color: red;
        background-color: white;
        font-family: "Lucida Grande", "Arial", sans-serif;
        font-size: 10px;
        font-weight: bold;
        text-align: center;
        width: 40px;
        border: 2px solid black;
        white-space: nowrap;
</style>
<script type="text/javascript">
    var flag = 0;
    var map;
    var poly;
    var marker;
    var LiveMarker = null;
    var distanceFlight = null;
    var LatLiveStorage;
    var LonLiveStorage;
    var LatStart;
    var LonStart;
    var Lat11 = 0;
    var Lon11 = 0;
    var Strecke = 0;
    //**********************************************
    //*        Start-Position anzeigen             *
    //**********************************************
    function Update()
    {
        var Lat = document.mainframe.Latitude.value;    // Startposition Latitude
        var Lon = document.mainframe.Longitude.value;   // Startposition Longitude 
        LatStart = Lat;
        LonStart = Lon;
        var latlng = new google.maps.LatLng(Lat, Lon);
        map.panTo(new google.maps.LatLng(Lat,Lon));     // Springe zur Startposition
        //********************************************
        //* Den Marker auf die Start-Position setzen *
        //********************************************
            var marker = new google.maps.Marker         // Marker auf die Startposition setzen
            (
                {
                    position: latlng, 
                    map: map,
                    icon: 'green.png',
                    title:"GESR-START-POSITION"
                }
            ); 
        //*********************************************
        //* Den Radius um die Start-Position zeichnen *
        //*********************************************
            //document.mainframe.DistanceRadius.value = 100000;
            var DistanceRadius = parseFloat(document.mainframe.DistanceRadius.value);
            if (flag == 0)                           // Den Kreis nur einmal zeichnen
            {
                var GESRmaxEntfernung =             // Definition des Kreises
                {
                    strokeColor: "#FF0000",          // Farbe des Kreisrandes
                    strokeOpacity: 0.8,              // Durchsichtigkeit des Kreisrandes
                    strokeWeight: 2,                 // Strichstärke des Kreisrandes
                    fillColor: "#00CC00",            // Farbe des gefüllten Kreises
                    fillOpacity: 0.1,                // Durchsichtigkeit des Kreises
                    clickable: false,
                    map: map,
                    center: latlng,                  // Wo soll der Kreis gezeichnet werden?
                    editable: true,
                    radius: DistanceRadius           // Radius in Meter
                }
                GESRCircle = new google.maps.Circle(GESRmaxEntfernung);     // Zeichne den Kreis um die Startposition
                flag = 1;
            }  
            //***********************************************************************
            //        Die Flugroute gemäss gewünschtem Flugplan einzeichen          *
            //***********************************************************************
            var lineSymbol = {path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW};
            var polyOptions =           // Definition der Flugstrecke, die gezeichnet werden soll
            {
                    strokeColor: '#00FF00',
                    strokeOpacity: 0.8,
                    strokeWeight: 2,
                    icons: [{                           // Pfeil ans Ende der Polyline setzen
                                icon: lineSymbol,
                                offset: '100%'
                            }],
                    editable: true                      // Die Polyline editierbar machen
            }
            poly = new google.maps.Polyline(polyOptions);           // Zeichne die nächste Verbindung des Flugplanes
            poly.setMap(map);    
            google.maps.event.addListener(map,'click',addLatLng);   // Setze den nächsten Punkt des Flugplanes
            autoUpdate();    // Live-Position anzeigen
    }
    function addLatLng(event)
    {
        var path = poly.getPath();
        path.push(event.latLng);
        var PosLatLng = event.latLng;
        var PosLat = PosLatLng.lat();
        var PosLng = PosLatLng.lng();
        //document.mainframe.MarkerUpdate.value = 5;    // Nur für Testzwecke
        switch (document.mainframe.MarkerUpdate.value) // Farben des Markers auf Grund der Waypoint-Eigenschaft festlegen
        {
            case "1":   image ='gruen.png'; // Ready for take of
                        break;
            case "2":   image ='rot.png';   // Landung
                        break;
            case "3":   image ='gelb.png';  // POI
                        break;
            case "4":   image ='rosa.png';  // Position go home
                        break;
            case "5":   image ='grau.png';  // Set home position
                        break;
            case "6":   image ='blau.png';  // Waypoint
                        break;           
            default:    image ='blau.png';
        };
        // Hier die Bestimmung der Waypoint-Koordinaten rein
            var marker_Waypoint = new google.maps.Marker(
            {
                position: event.latLng,
                icon: image, 
                title: 'Waypoint ' + path.getLength(),
                draggable: true,
                map: map
            });
        document.mainframe.LatitudePosMarker.value = PosLat;    // Übergabe der Flugplan-Koordinaten an die Webseite
        document.mainframe.LongitudePosMarker.value = PosLng;
    }
    //************************************************************************
    //*         Automatische Anzeige der Startposition                       *
    //************************************************************************
    function SeiteUpdaten()
    {
        if(document.mainframe.SeitenUpdate.value == 1)
        {
            Update();
            interval = setInterval(SeiteUpdaten,0);
            document.mainframe.SeitenUpdate.value = 0;
        }
    }
    //************************************************************************
    //*       Live-Position und die dazugehörigen Features anzeigen          *
    //************************************************************************
    function autoUpdate()
    {
        document.mainframe.LatitudePos.value = 52.12345;    // Beide Zeilen müssen hier wieder raus
        document.mainframe.LongitudePos.value = 9.12345;
        document.mainframe.drawingAirPlane.value = 1;  // Muss wieder hier nach der Testung wieder raus
        document.mainframe.drawingAirDistance.value = 1;  // Muss wieder hier nach der Testung wieder raus
        var AirDistance = parseFloat(document.mainframe.drawingAirDistance.value);
        var drawingAirPlane = parseFloat(document.mainframe.drawingAirPlane.value);  
        var LatLive = parseFloat(document.mainframe.LatitudePos.value);
        var LonLive = parseFloat(document.mainframe.LongitudePos.value);
        var newPoint = new google.maps.LatLng(LatLive,LonLive);
        // Berechnung der Entfernung zwischen Start- und Liveposition
        var Umrechnung = 3.141592653589793/180;                         // Notwendig für die Umwandlung in Radiant
        var Lat1 = document.mainframe.Latitude.value*Umrechnung;        // Latitude Startposition in Radiant
        var Lon1 = document.mainframe.Longitude.value*Umrechnung;       // Longitude Startposition in Radiant
        var Lat2 = document.mainframe.LatitudePos.value*Umrechnung;     // Latitude Liveposition in Radiant
        var Lon2 = document.mainframe.LongitudePos.value*Umrechnung;    // Longitude Liveposition in Radiant
        var r = 6371;  //Erdradius in Km
        var d = Math.abs((Math.acos(Math.sin(Lat1)*Math.sin(Lat2)+Math.cos(Lat1)*Math.cos(Lat2)*Math.cos(Lon2-Lon1))*6371)*1000); // Entfernung in Meter
        //------------------- Verbindunglinie LivePos zur HomePos ---------------------------
        var HomeLineCoordinates = 
        [
            new google.maps.LatLng(LatLive, LonLive),
            new google.maps.LatLng(LatStart,LonStart)
        ]

        var HomeLineSymbol = 
        {
            path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW
         };   
         var polyOptions = 
         {
            path: HomeLineCoordinates,
            strokeColor: "#FFFF00", // gelb
            strokeOpacity: 0.8,
            strokeWeight: 1.5,
            icons: [{
                    icon: HomeLineSymbol,
                    offset: '100%'
                   }],
            geodesic: true,
            map: map
         }
        //------------------------ Flugrichtung anzeigen ------------------------------------------
        var zoomLevel = map.getZoom();
        var DeltaLon = 0.004;
        var DeltaLat = 0.004;
        DeltaLon = DeltaLon / zoomLevel;
        DeltaLat = DeltaLat / zoomLevel;
        if (LonLive > LonLiveStorage && LatLive > LatLiveStorage)
        {
            DeltaLon = 1 * DeltaLon;
            DeltaLat = 1 * DeltaLat;
        };
        if (LonLive < LonLiveStorage && LatLive > LatLiveStorage)
        {
            DeltaLon = (-1) * DeltaLon;
            DeltaLat = 1 * DeltaLat;
        };
        if (LonLive < LonLiveStorage && LatLive < LatLiveStorage)
        {
            DeltaLon = (-1) * DeltaLon;
            DeltaLat = (-1) * DeltaLat;
        };
        if (LonLive > LonLiveStorage && LatLive < LatLiveStorage)
        {
            DeltaLon = 1 * DeltaLon;
            DeltaLat = (-1) * DeltaLat;
        };
        var FlyLineCoordinates = 
        [
            new google.maps.LatLng(LatLiveStorage,LonLiveStorage),
            new google.maps.LatLng(LatLive + DeltaLat, LonLive + DeltaLon)
        ]
        var FlyLineSymbol = 
        {
            path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW
         };   
         var FlyLineOptions =
         {
            path: FlyLineCoordinates,
            strokeColor: "#FFFFFF", // weiß
            strokeOpacity: 0.8,
            strokeWeight: 1.5,
            icons: [{
                    icon: FlyLineSymbol,
                    offset: '100%'
                   }],
            map: map
         };  
         //------------- Linien löschen und wieder neu zeichnen ---------------
         if (LoeschFlag == 1)
         {
            HomeLine.setMap(null);
            FlyLine.setMap(null);
            LoeschFlag = 0;
         }
         else
         {
            HomeLine = new google.maps.Polyline(polyOptions);
            FlyLine = new google.maps.Polyline(FlyLineOptions);
            LoeschFlag = 1;
         }
        //-----------------------------------------------------------------------------------------
        if (d <= 3)             // Modell befindet sich ganz in der Nähe des Startpunktes
        {
            document.mainframe.Funktion.value = 1;
        }
        if (d >= parseFloat(document.mainframe.DistanceRadius.value))   // Model befindet sich ausserhalb des Aktionsradius
        {
            document.mainframe.Funktion.value = 2;
        }
        document.mainframe.AirDistance.value = d;             // Übergabe der Entfernung an die WEB-Seite
        //document.mainframe.DistanceRadius.value = 400;      // Das hier wieder raus.Dieser Wert muss aus dem Hauptprogramm übergeben werden.
         var d2 = Math.abs((Math.acos(Math.sin(Lat11)*Math.sin(Lat2)+Math.cos(Lat11)*Math.cos(Lat2)*Math.cos(Lon2-Lon11))*6371)*1000);// Geflogene Gesamtstrecke in Meter berechnen  
        // Gesamt geflogene Strecke bestimmen
        document.mainframe.Gesamtstrecke.value += d2;//Strecke;     //Übergabe der Gesamtstrecke an die Webseite
        if (d <= parseFloat(document.mainframe.DistanceRadius.value))           // Befindet sich das Modell innerhalb des Sicherheits-Radius?
        {
            if (LiveMarker != null)                 // Marker immer auf die Live-Position legen
            {         
                LiveMarker.setPosition(newPoint);   // Live-Marker already created ==> Move it
                if (drawingAirPlane == 1)           // Soll die Flugstrecke mitgezeichnet werden?
                {
                    var flightPlanCoordinates = 
                    [
                        new google.maps.LatLng(LatLiveStorage, LonLiveStorage),    // Koordinaten der zwei Punkte festlegen,
                        new google.maps.LatLng(LatLive, LonLive)                   // zwischen denen gezeichnet werden soll.
                    ];
                    var flightPath = new google.maps.Polyline                      // Definition der Polyline
                    (
                        {
                            path: flightPlanCoordinates,
                            strokeColor: "#FF0000",
                            strokeOpacity: 1.0,
                            strokeWeight: 1.5
                        }
                    );
                    LatLiveStorage = LatLive;                   // Latitude für Polyline zwischen speichern
                    LonLiveStorage = LonLive;                   // Longitude für Polyline zwischen speichern
                    Lat11 = Lat2;
                    Lon11 = Lon2;
                    flightPath.setMap(map);                     // Geflogene Strecke einzeichnen.
                };  
            }
            else
            {
                LiveMarker = new google.maps.Marker             // Live-Marker does nost exist ==> Create it
                (
                    {
                        position: newPoint,
                        map: map,
                        draggable: true,
                        title: "GESR-Dis.: " + d + "m",
                        icon: 'red.png'
                    }
                );
            };
        };
        map.setCenter(newPoint);                   // Center the map on the new position
        setTimeout(autoUpdate,50);                // Rufe die Funktion autoUpdate immer wieder auf
    }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
    <center>
        <form name="mainframe" action="" >
	       	<input type="text" name="StartFlag" size=11>
            <input type="text" name="Latitude" size=11>
            <input type="text" name="Longitude" size=11>
            <input type="text" name="LatitudePos" size=11>
            <input type="text" name="LongitudePos" size=11>
            <input type="text" name="LatitudePosMarker" size=11>
            <input type="text" name="LongitudePosMarker" size=11>
            <input type="text" name="StartPositionFlag" sinze=11>
            <input type="text" name="drawingAirPlane" sinze=11>
            <input type="text" name="drawingAirDistance" sinze=11>
            <input type="text" name="AirDistance" sinze=11>
            <input type="text" name="DistanceRadius" sinze=11>
            <input type="text" name="Funktion" size=11>
            <input type="text" name="Gesamtstrecke" size=11>
            <input type="text" name = "SeitenUpdate" size = 11>
            <input type="text" name = "MarkerUpdate" size = 11>
        </form>
        <script type="text/javascript">
            var StartFlag = document.mainframe.StartFlag.value;
            var Zaehler = 1;
            while (StartFlag != 1 && Zaehler <= 10000)  // Warten auf das GPS-Signal
            {
                //setTimeout(Update,1000);
                Zaehler++;
            } 
            if (document.mainframe.StartFlag.value != 0)
            {  
                setTimeout(Update,500);        // Setze die neuen Koordinaten
            } 
        </script> 
	</center>
	<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3&sensor=false"></script>
    <script type="text/javascript" src="../src/markerwithlabel.js"></script>
    <script src="http://www.google.com/uds/api?ffile=uds.js&v=3.0" type=text/javascript"></script>
    <script src="http://www.google.com/uds/solutions/lacalsearch/gmlocalsearch.js" type="text/javascript"></script>
    <script type="text/javascript">
    //********************************
    //*       Deklarationen          *
    //********************************
     var zoomfaktor = 20;
     var Lat = 54.550242; //document.mainframe.Latitude.value;
     var Lon = 10.002566;       //document.mainframe.Longitude.value;
     document.mainframe.SeitenUpdate.value = 0;  // Defaultwert setzen
     var interval;
     var LoeschFlag = 0;
    //****************************************
    //*     Die komplette Map erzeugen       *
    //**************************************** 
  function initialize() 
  {
    var latlng = new google.maps.LatLng(Lat, Lon);
    //**************************************
    //*        Die Map anzeigen            *
    //**************************************
    document.mainframe.Funktion.value = 0;
    var myOptions = 
    {
        zoom: zoomfaktor,
        center: latlng,
        mapTypeControl: false,
        draggableCursor: 'auto',             // Aussehen des Cursors
        draggingCursor: 'move'  ,
        disableDoubleClickZoom: false,
        mapTypeId: google.maps.MapTypeId.SATELLITE 
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    //********************************************
    //* Den Marker für die Home-Position setzen  *
    //********************************************
    var marker = new google.maps.Marker
    (
        {
            position: latlng, 
            map: map,
            icon: 'home.png',
            title:"GESR-HOME"
        }
    );
    //************************************************************************
    //*           Infofenster GESR-Heimat mit Koordinaten-Angabe             *
    //************************************************************************
    var infoWindow = new google.maps.InfoWindow(
    {
        content: 'GESR-home landing field' + "<br/>Lat: " + Lat + "°" + "<br/>Lon: " + Lon + "°"
    });
    infoWindow.open(map, marker);
    //*************************************************************************
    //*     Ist die Startposition gesetzt? Wenn ja, dann weiter machen        *
    //************************************************************************* 
    interval = setInterval(SeiteUpdaten,500);
  }
</script>
</body>
</html>
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben