javascript - 计算javascript中两个坐标之间的距离?

标签 javascript html css google-maps

我正在尝试计算 KM 中两个纬度和经度之间的距离,并在标签或段落中显示该距离。

  • 我有一个地址,我需要从中找出 lat1lon1。我能解决这个问题。
  • 我需要找到我当前位置的 lat2lon2。我也能解决这个问题。

现在一旦我有了 lat1lon1lat2lon2 - 我需要找到它们之间的距离坐标。下面是我的代码,但一旦我提醒它,它就会将距离设置为 NaN。我不确定这里出了什么问题。这也是我在这里做的正确方法吗?

<!DOCTYPE html>
<html>
<style>
body {
  margin: 0;
  padding: 0;
  font: 12px sans-serif;
}
h1, p {
  margin: 0;
  padding: 0;
}
#map_div{
    width:400px;
    height:400px;
    margin: 0 auto;
}
#outer {
    width:400px;
    height:50px;
    margin:0 auto;
    text-align:center;
}
#outer input[type="text"] {
    display: block;
    margin: 0 auto;
}

</style>
<body>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&amp;sensor=false"></script>

<div id="outer">
<p id="distance_text">this is 201 km away from</p>
<input type="text" name="location" value="Current Location"><br>
<div id="map_div"></div>
</div>

</body>
<script type="text/javascript">
var lat1;
var lon1;
var lat2;
var lon2;
var geocoder = new google.maps.Geocoder();
var address = "1750 riverside drive, ottawa, ontario, canada";

geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
    lat1 = results[0].geometry.location.lat();
    lon1 = results[0].geometry.location.lng();
    }
});

var x = document.getElementById("distance_text");
getLocation();
function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.watchPosition(showPosition);
    } else { 
        x.innerHTML = "Geolocation is not supported by this browser.";
    }
}

function showPosition(position) {
    lat2 = position.coords.latitude;
    lon2 = position.coords.longitude;
}
var distance = getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2);
alert(distance);
function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = deg2rad(lat2-lat1);
  var dLon = deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}
</script>
</html>

我需要在计算后将 201 km 替换为实际距离。这是我的 jsfiddle

最佳答案

您可以使用谷歌地图距离方法,但它需要 LatLng 对象

试试这个:

const from = new google.maps.LatLng(lat1, lng1);
const to = new google.maps.LatLng(lat2, lng2);
const distance =  google.maps.geometry.spherical.computeDistanceBetween(from,to)

这是有效的 JSfiddle 您可能必须在 map 脚本标记中添加 API key : https://jsfiddle.net/ruokyanv/

更改 p 标签距离:是的,您可以在 html 中注入(inject) js 文件并使用 jquery $:

var distance = `this is ${distance} km away from`
$('#distance_text').val(distance)

如果问题仍然存在,请告诉我。

关于javascript - 计算javascript中两个坐标之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52020294/

相关文章:

javascript - 是否可以自动密封JS对象?

javascript - 在连续函数中使用 jQuery 的加载

javascript - 如何在拖动时隐藏可拖动div的阴影

javascript - 如何将 HTML 按钮放入 javascript 代码中?

javascript - 通过 AJAX 重新加载下拉菜单中提交的 PHP 变量

php - 将多个返回的 MySQL 行添加到 PHP 中的同一数组键元素

css - 将一个 div 居中,将同级 div 扩展到剩余空间

html - 在左列和右列中的图像上 float 文本 block

css - 在下拉菜单上有一个下拉菜单?

html - 在 EPUB (v3) 中调整图像大小