Javascript Phonegap地理位置坐标之间的距离
我试图用javascript计算两个坐标之间的距离。Javascript Phonegap地理位置坐标之间的距离,javascript,android,cordova,gps,geolocation,Javascript,Android,Cordova,Gps,Geolocation,我试图用javascript计算两个坐标之间的距离。 更具体地说,一组静态坐标和我从地理位置cordova插件获取的当前位置之间的距离 这是我的密码: document.addEventListener('deviceready', onDeviceReady, false); function onDeviceReady() { navigator.geolocation.getCurrentPosition(onSuccess, onError); }; var onSucces
更具体地说,一组静态坐标和我从地理位置cordova插件获取的当前位置之间的距离 这是我的密码:
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
var onSuccess = function(position) {
document.getElementById("content").innerHTML = 'Success, attempting calculation...';
var lla = position.coords.latitude;
var llo = position.coords.longitude;
document.getElementById("content").innerHTML =
'GPS Position: ' + calcTheDistance(lla, llo).d + 'Metres';
};
var onError = function(error) {
document.getElementById("content").innerHTML =
'code: ' + error.code + '\n' +
'message: ' + error.message + '\n';
};
function refrGps() {
document.getElementById("content").innerHTML = 'Loading...';
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
function calcTheDistance(lati1, long1) {
var r = 6371000; //Meters
var joschLat = 50.1109221;
var joschLon = 8.6821267;
var la1 = lati1;
var la2 = joschLat;
var lat1 = lati1.toRadians();
var lat2 = joschLat.toRadians();
var lo1 = long1;
var lo2 = joschLon;
var la2minla1 = (la2-la1).toRadians();
var lo2minlo1 = (lo2-lo1).toRadians();
var cal = Math.sin(la2minla1 / 2) * Math.sin(la2minla1 / 2) +
Math.cos(lat1) * Math.cos(lat2) *
Math.sin(lo2minlo1/2) * Math.sin(lo2minlo1/2);
var c = 2* Math.atan2(Math.sqrt(cal), Math.sqrt(1-cal));
d = r * c;
};
我试着重写了好几次,但都没有成功
对于我提到的计算:您引用的页面包含一个。如果在应用程序中包含这些内容,计算将变得微不足道:
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
var onSuccess = function(position) {
document.getElementById("content").innerHTML = 'Success, attempting calculation...';
var sourceLl = new LatLon(position.coords.latitude, position.coords.longitude);
document.getElementById("content").innerHTML =
'GPS Position: ' + calcTheDistance(sourceLl) + 'Metres';
};
var onError = function(error) {
document.getElementById("content").innerHTML =
'code: ' + error.code + '\n' +
'message: ' + error.message + '\n';
};
function refrGps() {
document.getElementById("content").innerHTML = 'Loading...';
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
function calcTheDistance(sourceLl) {
var joschLat = 50.1109221;
var joschLon = 8.6821267;
var joschLl = new LatLon(joschLat, joschLon);
return joschLl.distanceTo(sourceLl);
};
所以我在读了@DaveAlden的答案后就明白了,顺便说一句,谢谢 托拉迪亚斯();不是一个标准的Javascript函数,所以在我添加了这个函数并重写了一点代码之后,它工作得很好 这是工作代码 文件。添加的监听器('deviceready',onDeviceReady,false)
问题是什么?它不起作用?给出了错误的结果?你检查过了吗?你发现了吗?:@Koshinae是的,不起作用,它将innerHTML更改为“成功,尝试计算…”,但没有进一步,我没有在
calcTheDistance
中看到return
语句。我没有使用库,但您的回答认为我的代码有什么问题,非常感谢!
function onDeviceReady() {
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
var onSuccess = function(position) {
document.getElementById("content").innerHTML = 'Success, attempting calculation...';
var lla = position.coords.latitude;
var llo = position.coords.longitude;
var dst = 'Distance: ' + calcTheDistance(lla, llo) + ' Metres';
document.getElementById("content").innerHTML = dst;
};
var onError = function(error) {
document.getElementById("content").innerHTML =
'code: ' + error.code + '\n' +
'message: ' + error.message + '\n';
};
function refrGps() {
document.getElementById("content").innerHTML = 'Loading...';
navigator.geolocation.getCurrentPosition(onSuccess, onError);
};
function toRadians(num) {
return num * Math.PI / 180;
};
function calcTheDistance(lati1, long1) {
var r = 6371000; //metres
var joschLat = 50.1109221;
var joschLon = 8.6821267;
var la1 = lati1;
var la2 = joschLat;
var lat1 = toRadians(lati1);
var lat2 = toRadians(joschLat);
var lo1 = long1;
var lo2 = joschLon;
var la2minla1 = toRadians(la2-la1);
var lo2minlo1 = toRadians(lo2-lo1);
var cal = Math.sin(la2minla1 / 2) * Math.sin(la2minla1 / 2) +
Math.cos(lat1) * Math.cos(lat2) *
Math.sin(lo2minlo1/2) * Math.sin(lo2minlo1/2);
var c = 2* Math.atan2(Math.sqrt(cal), Math.sqrt(1-cal));
var d = r * c;
return Math.round(d);
};