我有以下代码,用户可以在Google地图上绘制两个点。然后,我希望能够捕获被拖动到新位置的每个点(标记)的事件。我在Javascript上很糟糕并且花了好几个小时试图这样做,所以我觉得是时候我会得到一些帮助..
我要做的是让用户在地图上绘制两个可拖动的点(标记)。然后我希望能够让我的脚本将位置(lat,long)写入文档。然后,我将计算这些作为我正在制作的运送应用程序的一部分之间的距离。
我希望在将标记(点)拖动到新位置时更新文档内容(lat,long)。
另外,我修正了一个小学生错误,其中点变量在switch语句中被decalred。通过在switch语句中移动Add事件侦听器语句来解决我的问题。谢谢Cannonade:)
接下来的事情是尝试计算两点之间的距离(乌鸦苍蝇)
再次感谢您的帮助......一如既往地赞赏!!
更新的有效代码:
var map = null;
var geocoder = null;
var zoom = 15;
var first_point = false;
var boundary = new Array();
var cCount = 0;
var point1;
var point2;
function initialize() {
if (GBrowserIsCompatible()) {
first_point = false;
map = new GMap2(document.getElementById("map_canvas"));
var center = new GLatLng(37.4419, -122.1419);
map.setCenter(center, zoom);
GEvent.addListener(map, "click", function(overlay,point)
{
if (overlay != null)
{}
else
{
var n = boundary.length;
switch (cCount)
{
case 0:
point1 = new GMarker(point,{draggable: true});
map.addOverlay(point1);
cCount++;
GEvent.addListener(point1, "dragend", function()
{
alert('P1 Dragged');
});
break;
case 1:
point2 = new GMarker(point,{draggable: true});
map.addOverlay(point2);
cCount++;
GEvent.addListener(point2, "dragend", function()
{
alert('P2 Dragged');
});
break;
case 2:
map.clearOverlays();
cCount=0;
break;
}
}
});
map.addControl(new GSmallMapControl());
geocoder = new GClientGeocoder();
}
}
答案 0 :(得分:0)
我已经使用了您的代码并进行了以下修复:
您可以check out the example here(source)。
修改强>
以下是一些Javascript代码,用于获取两点之间的线性距离(以米为单位):
/* Convert degress to radians */
function deg2rad(deg) {
return deg / (180 / Math.PI);
}
/* Calculate distance between two points */
function point_distance(a, b) {
var r = 6378700;
var lat1 = a.y;
var lat2 = b.y;
var lon1 = a.x;
var lon2 = b.x;
var dist = r * Math.acos(Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.cos(deg2rad(lon1 - lon2)));
return dist;
}
这是基于地球的近似半径为6378700m。