javascript - ComputeDistanceBetween 返回 NaN 而不是距离

标签 javascript html google-maps google-maps-api-3

请参阅下面的代码,我对 javascript 很业余,如果它真的很糟糕,那么抱歉。 基本上,我的函数 someFunc() 在通过某些表单获取 eventlocationcurrentlocation 后按下按钮即可激活其他功能。 我认为 NaN 是一个错误,我认为这必须是一个相当简单的修复,我只是有了一个线索。

两个全局变量globaleventglobalcurrent使用someFunc()中的文档设置值回显正确的坐标,但计算距离是不工作。当我“发布”坐标并将它们作为 php 变量带回时,它计算得很好。

更新:以下作品 @geocodezip 让我朝着正确的方向前进。

var map;
var pos;
var geocoder;

function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var mapOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map-canvas'),
  mapOptions);
  }

function getLocation(){
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
  pos = new google.maps.LatLng(position.coords.latitude,
                                   position.coords.longitude);
document.getElementById('distance').value = pos;  
}, function() {
  handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
}


function handleNoGeolocation(errorFlag) {
 if (errorFlag) {
var content = 'Error: The Geolocation service failed.';
} else {
var content = 'Error: Your browser doesn\'t support geolocation.';
}

var options = {
map: map,
position: new google.maps.LatLng(60, 105),
content: content
};

var infowindow = new google.maps.InfoWindow(options);
map.setCenter(options.position);
}

function createLine()
{

geocoder = new google.maps.Geocoder();
var address = document.getElementById('distance').value;
var address2 = document.getElementById('address').value;

var temp, temp2;

geocoder.geocode({ 'address': address }, function (results, status) {
temp = results[0].geometry.location;
geocoder.geocode({ 'address': address2 }, function (results, status) {
    temp2 = results[0].geometry.location;

var route = [
  temp,
  temp2
];

var polyline = new google.maps.Polyline({
    path: route,
    strokeColor: "#ff0000",
    strokeOpacity: 0.6,
    strokeWeight: 5
});

var lengthInMeters = google.maps.geometry.spherical.computeLength(polyline.getPath());
var distance = lengthInMeters/1000*0.621371192;

document.getElementById('distance2').value = distance;

polyline.setMap(map);
});
});
}

google.maps.event.addDomListener(window, 'load', initialize);

最佳答案

Google Maps Javascript API v2 中没有computeDistanceBetween 方法,请使用 GLatLng.distanceFrom在该版本的 Google Maps Javascript API 中。

from the documentation

Note: The Google Maps JavaScript API Version 2 was officially deprecated on May 19, 2010. The original deprecation period has been extended from May 19, 2013 until November 19, 2013. As of this date, all applications requesting v2 will be served a special, wrapped version of the v3 API instead. We expect this wrapped version of the API will work for most simple maps, but we strongly encourage you to migrate your code to version 3 of the Maps JavaScript API before this date.

这将创建一个字符串:

全局当前 = 位置.坐标.纬度+","+位置.坐标.经度;

这将使用这些坐标创建一个 GLatLng:

对于 v2:

globalcurrent = new GLatLng(position.coords.latitude,position.coords.longitude);

对于 v3:

globalcurrent = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);

关于javascript - ComputeDistanceBetween 返回 NaN 而不是距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070246/

相关文章:

ios - 标记谷歌地图 Swift 信息窗口

google-maps - Google map v3 fitBounds() 对于单个标记缩放太近

javascript - 使用 Canvas 在 JS 中模拟重力

javascript - For 循环不适用于 json 数据

javascript - 如何在 jQuery 中重新计算单击时的变量?

Jquery 不使用动态创建的表

android - 如何跟踪用户坐标并在谷歌地图中显示

javascript - Ember.js Outlet 模型改变但内容不变

jQuery 图像 slider 在 IE7 上不显示内容

javascript - 如何使用 jquery 删除一个元素和下一个元素?