2015-01-20 3 views
-2

Я делаю переход маркера из точки 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); 
} 
+0

прошлом я проверил [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

+0

Я использую v3, и я использую портированную версию epoly.js для работы с v3 ... – starvingpilot

+0

Если вы добавите точку в строке 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

ответ

1

Если добавить точку на международной линии перемены даты, она работает

example

Incl НЖЯ эти точки:

<point lat="37.77493" lng="-122.419416"/> 
<point lat="39.614028" lng="-179.906751"/> 
<point lat="39.904211" lng="116.407395"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^