我正在尝试计算用户与下面坐标之间的距离,我不确定我做错了什么,但我得到了响应'NaN'(不是数字)
HTML:
<h3>Come visit</h3>
<p>You're only <span class="distance"> </span>km away</p>
JS文件:
// Location
if($('#content').hasClass('contact_page')) {
var localSearch = new GlocalSearch();
var sharp_hq = {
lat: 53.639993,
lng: -1.782354
};
// calculate the distance between me and thee
var calculate_distance = function(location) {
return Math.round(3959 * 1.609344
* Math.acos(Math.cos(0.0174532925 * location.y)
* Math.cos(0.0174532925 * sharp_hq.lat)
* Math.cos((0.0174532925 * sharp_hq.lng) - (location.x * 0.0174532925))
+ Math.sin(0.0174532925 * location.y)
* Math.sin(0.0174532925 * sharp_hq.lat)));
};
// geo location
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
//display in .distance <span>
$('.distance', '.location').html(calculate_distance(initialLocation));
$('p', '.location').css({ display: 'block' });
});
}
}
答案 0 :(得分:1)
google.maps.LatLng对象没有.x或.y属性
看起来您可能仍然希望Google Maps Javascript API v2能够正常工作(它已被v3的包装器取代)。
而不是location.x / location.y使用location.lat()作为纬度,使用location.lng()作为经度。或者使用.x和.y属性创建自己的匿名对象(但不要指望它可以与google.maps.LatLng对象互换)。
注意: Google Maps Javascript API v3有一个library to calculate distance。
答案 1 :(得分:1)
$(document).ready(function(){
var sharp_hq = {
lat: 53.639993,
lng: -1.782354
};
// geo location
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
$('.distance').html( gc(position.coords.latitude,position.coords.longitude,sharp_hq.lat,sharp_hq.lng).toFixed(2) );
$('p', '.location').css({ display: 'block' });
});
}
} ) ;
/** Converts numeric degrees to radians */
if (typeof (Number.prototype.toRad) === "undefined") {
Number.prototype.toRad = function () {
return this * (Math.PI / 180);
}
};
function gc(lat1, lon1, lat2, lon2) {
// returns the distance in km between the pair of latitude and longitudes provided in decimal degrees
var R = 6371; // km
var dLat = (lat2 - lat1).toRad();
var dLon = (lon2 - lon1).toRad();
var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon / 2) * Math.sin(dLon / 2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
var d = R * c;
return d;
}
答案 2 :(得分:0)
您可以使用名为google.maps.geometry.computeDistanceBetween()
的函数找到两个latlng对象之间的距离。
https://developers.google.com/maps/documentation/javascript/geometry
用{/ p>替换对calculate_distance
功能的调用
var distance = google.maps.geometry.spherical.computeDistanceBetween(
new google.maps.LatLng(sharp_hq.lat, sharphq.lng),
initialLocation
) / 1000;
$('.distance').text(distance);
以米为单位返回距离,然后除以1000。
答案 3 :(得分:0)
在您的公式中,(0.0174532925 * sharp_hq.lng) - (location.x * 0.0174532925)的值可以是&lt; 0导致NaN。
如果<0,则需要将其预处理为0以避免异常。
我希望这可以在不改变整个公式的情况下解决您的问题。