Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图:在多段线图标上附加事件_Javascript_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Javascript 谷歌地图:在多段线图标上附加事件

Javascript 谷歌地图:在多段线图标上附加事件,javascript,google-maps-api-3,google-maps-markers,Javascript,Google Maps Api 3,Google Maps Markers,我有一个页面,试图在地图上模拟船只的位置。其中一些船舶位于多段线上道路的某个百分比处,其他船舶位于单点标记处 对于沿多段线行驶的船舶,我能够正确显示图标。我想做的是将事件完全附加到该图标上,而不是整个多段线上 我的密码在 我还尝试使用google.maps.geometry.spherical.ComputedIstanceBeween计算船舶位置的LatLng,但由于使用了球面几何,因此这些点无法在平面地图上正确平移。有关计算船舶位置的LatLng,请参阅,以及 下面是修改后的GetPoin

我有一个页面,试图在地图上模拟船只的位置。其中一些船舶位于多段线上道路的某个百分比处,其他船舶位于单点标记处

对于沿多段线行驶的船舶,我能够正确显示图标。我想做的是将事件完全附加到该图标上,而不是整个多段线上

我的密码在


我还尝试使用google.maps.geometry.spherical.ComputedIstanceBeween计算船舶位置的LatLng,但由于使用了球面几何,因此这些点无法在平面地图上正确平移。

有关计算船舶位置的LatLng,请参阅,以及

下面是修改后的GetPointAtDistance函数

/==返回沿路径给定距离的点的GLatLng的方法===
//==如果路径短于指定距离,则返回null===
google.maps.Polygon.prototype.GetPointAtDistance=函数(米){
//一些棘手的特殊情况
if(meters==0)返回此.getPath().getAt(0);
如果(米<0)返回空值;
if(this.getPath().getLength()<2)返回null;
var-dist=0;
var-olddist=0;
对于(var i=1;(i
现在查看此项。不过我认为这会很好地工作。谢谢
// === A method which returns a GLatLng of a point a given distance along the path ===
// === Returns null if the path is shorter than the specified distance ===
google.maps.Polygon.prototype.GetPointAtDistance = function(metres) {
  // some awkward special cases
  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 projection = this.getMap().getProjection(); 
  if (!projection) {
    alert("no projection");
    return; 
  }
  // Project 
  var p1= projection.fromLatLngToPoint(this.getPath().getAt(i-2));
  var p2= projection.fromLatLngToPoint(this.getPath().getAt(i-1));
  var m = (metres-olddist)/(dist-olddist);
  // alert("p1="+p1+" p2="+p2+" m="+m);
  // Unproject 
  return projection.fromPointToLatLng(new google.maps.Point( p1.x + (p2.x-p1.x)*m, p1.y + (p2.y-p1.y)*m));
}