Zeigen einer beweglichen Markierung auf der Karte
Ich versuche einen marker verschieben(nicht verschwinden und erscheinen wieder) auf der Karte, wie ein Fahrzeug bewegt sich auf der Straße.
Habe ich zwei Werte latLng und ich möchten verschieben Sie die Markierung zwischen den beiden, bis der nächste Punkt ist die aus dem Fahrzeug gesendeten. Und dann wiederholen Sie den Vorgang erneut.
, Was ich versucht habe:[Dies ist nicht ein sehr effizienter Weg, ich weiß],
Mein Gedanke war die Umsetzung der oben genannten Nutzung der Technik in folgenden Punkten ist:
1) Ziehen Sie eine Linie zwischen den beiden.
2) Holen Sie sich die latLng von jedem Punkt auf der 1/10tel Anteil der Polylinie.
3) Markieren Sie die 10 Punkte auf der Karte zusammen mit der Polylinie.
Hier ist mein Code:
var isOpen = false;
var deviceID;
var accountID;
var displayNameOfVehicle;
var maps = {};
var lt_markers = {};
var lt_polyLine = {};
function drawMap(jsonData, mapObj, device, deleteMarker) {
var oldposition = null;
var oldimage = null;
var arrayOflatLng = [];
var lat = jsonData[0].latitude;
var lng = jsonData[0].longitude;
//alert(jsonData[0].imagePath);
var myLatLng = new google.maps.LatLng(lat, lng);
if (deleteMarker == true) {
if (lt_markers["marker" + device] != null) {
oldimage = lt_markers["marker" + device].getIcon().url;
oldposition = lt_markers["marker" + device].getPosition();
lt_markers["marker" + device].setMap(null);
lt_markers["marker" + device] = null;
}
else {
console.log('marker is null');
oldimage = new google.maps.MarkerImage(jsonData[0].imagePath,
null,
null,
new google.maps.Point(5, 17), //(15,27),
new google.maps.Size(30, 30));
oldposition = myLatLng;
}
}
var image = new google.maps.MarkerImage(jsonData[0].imagePath,
null,
null,
new google.maps.Point(5, 17), //(15,27),
new google.maps.Size(30, 30));
lt_markers["marker" + device] = new google.maps.Marker({
position: myLatLng,
icon: image,
title: jsonData[0].address
});
if (oldposition == myLatLng) {
alert('it is same');
lt_markers["marker" + device].setMap(mapObj);
mapObj.panTo(myLatLng);
}
else {
alert('it is not same');
var markMarker = null;
var i = 10;
for (i = 10; i <= 100; i + 10) {
//-------
// setTimeout(function() {
if (markMarker != null) {
markMarker.setMap(null);
markMarker = null;
}
alert('inside the loop');
var intermediatelatlng = mercatorInterpolate(mapObj, oldposition, myLatLng, i / 100);
alert('Intermediate Latlng is :' + intermediatelatlng);
arrayOflatLng.push(intermediatelatlng);
var flightPath = new google.maps.Polyline({
path: arrayOflatLng,
strokeColor: "#FFFFFF",
strokeOpacity: 1.0,
strokeWeight: 1
});
flightPath.setMap(mapObj);
if (i != 100) {
markMarker = new google.maps.Marker({
position: intermediatelatlng,
icon: image,
title: jsonData[0].address,
map: mapObj
});
}
else {
markMarker = new google.maps.Marker({
position: intermediatelatlng,
icon: oldimage,
title: jsonData[0].address,
map: mapObj
});
}
mapObj.panTo(intermediatelatlng);
//--------
// }, 1000);
}
}
}
function mercatorInterpolate(map, latLngFrom, latLngTo, fraction) {
//Get projected points
var projection = map.getProjection();
var pointFrom = projection.fromLatLngToPoint(latLngFrom);
var pointTo = projection.fromLatLngToPoint(latLngTo);
//Adjust for lines that cross the 180 meridian
if (Math.abs(pointTo.x - pointFrom.x) > 128) {
if (pointTo.x > pointFrom.x)
pointTo.x -= 256;
else
pointTo.x += 256;
}
//Calculate point between
var x = pointFrom.x + (pointTo.x - pointFrom.x) * fraction;
var y = pointFrom.y + (pointTo.y - pointFrom.y) * fraction;
var pointBetween = new google.maps.Point(x, y);
//Project back to lat/lng
var latLngBetween = projection.fromPointToLatLng(pointBetween);
return latLngBetween;
}
Problemen Konfrontiert:
1) Der marker wird nicht angezeigt auf der Karte, da der Prozess des Auftragens und der Entfernung der marker ist so schnell, dass der marker nicht visisble auf dem Bildschirm. Ich habe versucht, setTimeOut, und Es hilft dabei überhaupt nicht.
2) wenn ich alow lief der browser diesen code für mehr als 5 Minuten, stürzt der browser ab.
Hinweis: Die Obige Funktion wird aufgerufen, alle 10 Sekunden mit setInterval.
Was Kann eine bessere Lösung sein? Bitte Um Hilfe..
- Animierte Markierung entlang beliebiger Polylinien (aus XML); animierte Markierung entlang Polylinie aus DirectionsService
- was ist falsch mit der Verwendung einer callback-Funktion zu ziehen Sie eine Markierung auf jeder Stelle, die Sie haben, interpoliert? So zeichnen Sie eine Markierung, in den nächsten Zyklus, entfernen Sie es, und lege einen marker auf das nächste berechnet latlng...
- Dank GeocodeZip..! Lassen Sie mich es einmal versuchen.!
- Thomas Kann Sie erklären, die callabck Mechanismus in einem code?
- Sie machen eine callback-Funktion (suchen requestAnimationFrame und setTimeout-Funktion). Diese Funktion ist als gehen bezeichnet zu werden, alle x ms. Das ist die frame-rate der animation. Innerhalb der callback-Funktion, die Sie hinzufügen eine neue Markierung und entfernen Sie die alte ein.
- Wenn du genau liest habe ich deutlich geschrieben in meiner Frage, dass " ich habe versucht, setTimeOut, und Es hilft dabei überhaupt nicht."
- developers.google.com/maps/documentation/javascript/examples/...
- Auch Können Sie mir bitte sagen, wie lassen Sie die Polylinie auf der Straße?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den marker zu verschieben relativ problemlos, Sie müssen
Zum Beispiel, etwas wie:
Habe ich ein einfaches Beispiel an http://jsfiddle.net/bmSbU/2/ das zeigt eine Markierung, bewegen sich entlang eines geraden Pfades. Wenn dies ist, was Sie wollen, die meisten Ihrer code oben in Bezug auf, wo entlang der Linie, die Sie sind können wiederverwendet werden (oder check-out http://broady.github.io/maps-examples/points-along-line/along-directions.html )
Können Sie marker-animieren-unauffällig Bibliothek zu machen, Marker
reibungslos den übergang von einem Ort zum anderen (statt der wieder auftaucht).
Könnten Sie initialisieren Sie Ihre marker so:
Einfach anrufen marker.setPosition (), die jedes mal neue Fahrzeug-Koordinate ankommen.
P. S. ich bin der Autor der Bibliothek.
Warum nicht die vorhandene Marker/MarkerImage und rufen setPosition (), um es zu bewegen, entweder auf einem timer oder die position ändert?
Löschen & neu es ist, was es bewirkt zu blinken/flackern und schließlich Absturz. Wenn Sie die gleiche Instanz, sondern nur verschieben, sollten Sie viel besser tun.
Finden Sie Unter: Marker.setPosition()
https://developers.google.com/maps/documentation/javascript/reference#Marker
Machen animiert bewegen den marker auf der Google map mit javascript, und kann sehen, wie Sie auf Youtube.com
Versuchen Sie es mit diesem Link..
Zuerst fügen Sie zwei Marker, die an 2 Orten, die Sie haben.
Dann können Sie erstellen eine animation, die zwischen die 2 Punkte mit dem code in der Link