gpt4 book ai didi

javascript - this.setMap() 不适用于自定义叠加层

转载 作者:行者123 更新时间:2023-12-02 19:43:14 26 4
gpt4 key购买 nike

我正在为 Google map 编写自定义叠加层。我有很多经纬度点,我想要带有指向和来自它们的箭头的图像。我正在关注 Google 的自定义叠加层教程 (https://developers.google.com/maps/documentation/javascript/overlays#CustomOverlays)。

在我的覆盖层的“构造函数”中,此行失败:'this.setMap(this.map_);'

我需要做什么才能让它发挥作用?

这是我的叠加层的“构造函数”。虚线位于底部。当我测试时,所有对“警报”的调用都在那里。最后一次调用未到达,这就是为什么我认为“this.setMap()”不起作用。

 //This serves as a constructor for a link overlay
function LinkOverlay(startNodeCoordinates, endNodeCoordinates, map)
{
alert("constructor start");
this.map_ = map;

//These are the lat-long coordinates of where the link starts and ends
this.startNodeCoordinates_ = startNodeCoordinates;
this.endNodeCoordinates_ = endNodeCoordinates;

alert("constructor coordinates stored");

// We define a property to hold the image's
// div. We'll actually create this div
// upon receipt of the add() method so we'll
// leave it null for now.
this.div_ = null;

alert("constructor div saved");

//We need to know if we draw the arrow up or down and left or right.
//We calculate this by finding the bearing between the two nodes. If
//the bearing is N to NE, then the arrow goes up and to the right,
//for example. If the bearing is E to SE, then the arrow goes down
//and to the right, and so on.

//Calculate bearing
/*
* This algorithm determines the bearing (or angle) between two coordinate points.
* It was adapted from http://www.movable-type.co.uk/scripts/latlong.html
*/
alert("constructor calculating bearing")
this.bearing_ = null;
var lat1 = this.startNodeCoordinates_.lat();
var lat2 = this.endNodeCoordinates_.lat();
var dLon = this.startNodeCoordinates_.lng() - this.endNodeCoordinates_.lng();
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
this.bearing_ = Math.atan2(y, x);

alert("constructor bearing found (bearing = " + this.bearing_ + ")");

this.arrowUp_ = null;
this.arrowRight_ = null;
this.image_ = null;

alert("constructor picking image");

if((this.bearing_ >= 0 && this.bearing_ < (Math.PI * 0.5)) || this.bearing_ == (Math.PI * 2))
{
alert("constructor NE");
//If bearing is N to NE, the arrow goes up and to the right
this.arrowUp_ = new Boolean(true);
this.arrowRight_ = new Boolean(true);
this.image_ = "../../Content/map_images/link_overlay/up_right_black.png";
}
else if(this.bearing_ >= (Math.PI * 0.5) && this.bearing_ < Math.PI)
{
alert("constructor SE");
//If bearing is E to SE, the arrow goes down and to the right
this.arrowUp_ = new Boolean(false);
this.arrowRight_ = new Boolean(true);
this.image_ = "../../Content/map_images/link_overlay/down_right_black.png";
}
else if(this.bearing_ >= Math.PI && this.bearing_ < (Math.PI * 1.5))
{
alert("constructor SW");
//If bearing is S to SW, the arrow goes down and to the left
this.arrowUp_ = new Boolean(false);
this.arrowRight_ = new Boolean(false);
this.image_ = "../../Content/map_images/link_overlay/down_left_black.png";
}
else
{
alert("constructor NW");
//If bearing is W to NW, the arrow goes up and to the left
this.arrowUp_ = new Boolean(true);
this.arrowRight_ = new Boolean(false);
this.image_ = "../../Content/map_images/link_overlay/up_left_black.png";
}

alert("constructor adding to map");

// Explicitly call setMap() on this overlay
this.setMap(this.map_);

alert("constructor end");
}

//This "subclasses" a link overlay from Google Map's OverlayView class
LinkOverlay.prototype = new google.maps.OverlayView();

这是创建新 LinkOverlays 的代码(采用 Razor 语法):

@:var startNodeCoordinates = new google.maps.LatLng('@startNode.Latitude', '@startNode.Longitude');
@:var endNodeCoordinates = new google.maps.LatLng('@endNode.Latitude', '@endNode.Longitude');
@:var routeLine = new LinkOverlay(startNodeCoordinates, endNodeCoordinates, networkMap);

最佳答案

我也遇到了同样的问题。我使用"new"来实例化我的自定义覆盖层来修复它。在您的情况下,您确定在实例化覆盖层时使用:

linkOverlay = new LinkOverlay(s, e, map)

关于javascript - this.setMap() 不适用于自定义叠加层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com