Я делаю переход маркера из точки A в точку B с использованием .GetPointDistance из epoly.js в цикле. Он отлично работает, если кратчайшее расстояние не пересекает Intl Dateline. Если это происходит, как происходит из Сан-Франциско, Токио, он проходит в восточном направлении длинный путь вокруг вместо того, чтобы пересечь Тихий океан (Google полилинии будет рисовать правильно) Вот мой кодПуть к карте Google не пересекает международную линию Dateline с использованием epoly.js
function myLoop() {
setTimeout(function() {
var point = flightPath.GetPointAtDistance(newDistance);
marker.setPosition(point);
if (newDistance < legDistance) {
myLoop();
} else {
if (testArray.length > 0) {
flightPathShadow.setMap(map);
flightPath.setMap(map);
x = testArray.shift();
newDistance = 0;
loopWrapper();
}
}
oldDistance = newDistance;
newDistance = newDistance + travelDistance;
totalDistance = (totalDistance + travelDistance);
var milesDistance = totalDistance*0.000621371;
milesDistance = Math.round(milesDistance);
milesDistance = addCommas(milesDistance);
$("#dashboard").html("<h4>" + milesDistance + " miles traveled</h4>");
}, travelTime)
}
Вот функция в epoly. JS
google.maps.Polygon.prototype.GetPointAtDistance = function(metres) {
if (metres == 0) return this.getPath().getAt(0);
if (metres < 0) return null;
if (this.getPath().getLength() < 2) return null;
var dist=0;
var olddist=0;
for (var i=1; (i < this.getPath().getLength() && dist < metres); i++) {
olddist = dist;
dist += this.getPath().getAt(i).distanceFrom(this.getPath().getAt(i-1));
}
if (dist < metres) {
return null;
}
var p1= this.getPath().getAt(i-2);
var p2= this.getPath().getAt(i-1);
var m = (metres-olddist)/(dist-olddist);
return new google.maps.LatLng(p1.lat() + (p2.lat()-p1.lat())*m, p1.lng() + (p2.lng()-p1.lng())*m);
}
прошлом я проверил [epoly.js] (http://econym.org.uk/gmap/epoly.htm) был [Google Maps Javascript API v2] (https: // разработчики .google.com/maps/documentation/javascript/v2/reference). Эта версия API устарела и отключена на несколько лет. Как выглядит ваш ** код? Какую версию API вы используете? – geocodezip
Я использую v3, и я использую портированную версию epoly.js для работы с v3 ... – starvingpilot
Если вы добавите точку в строке Intl Date, она будет работать [пример] (http://www.geocodezip.com). /v3_animate_marker_xml.html?filename=CrossIntlDateLineX.xml) ([без этой точки зрения я вижу проблему] (http://www.geocodezip.com/v3_animate_marker_xml.html?filename=CrossIntlDateLine.xml) – geocodezip