我想编写一个页面,我可以点击一个按钮,它会给出当前位置,然后是另一个并获得新药水,然后告诉我我走了多远。我不需要计算地球的曲线或任何我没有走过那么远的LOL曲线。我也不想让它不断进行并更新地理位置。这就是我所拥有的,我哪里出错了?它一直在阅读NaN ......我是自学成才,所以我可能会有一些知识差距.LOL thx提前帮助
<html>
<body>
<p>Click the button to get your coordinates.</p>
<button onclick="getLocation()">start</button>
<BR><br><br>
<button onclick="getLocation2()">stop</button>
<button onclick="tods()">total</button>
<BR><br><br>
<p id="demo">something1</p>
<BR>
<p id="demo2">something2</p>
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
var y = document.getElementById("demo2");
function getLocation2() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition2);
} else {
y.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition2(position2) {
y.innerHTML = "Latitude: " + position2.coords.latitude +
"<br>Longitude: " + position2.coords.longitude;
}
</script>
<script>
function tods() {
var z = x.innerHTML - y.innerHTML;
document.getElementById("total").innerHTML = z;
}
</script>
<p id="total">something 3</p>
</body>
</html>
答案 0 :(得分:0)
我认为这不起作用的原因是因为.innerHTML没有返回数值。
我建议在尝试计算差异之前将返回的值(我相信一个字符串)解析为适当的数值。
此外,您获得两点之间距离的计算似乎不正确......
This question似乎性质相似。您可以参考已批准答案中的脚本来计算总数。
然后,您可以将数值传递给它或类似的函数。
如果您真的不想考虑地球的半径等,您可能需要查找计算图表上两点之间距离的公式,并在类似的位置实现距离计算时尚。
答案 1 :(得分:0)
对我的一些项目这样做了,所以下面的代码示例正在运行。以下代码调用在更新时传递了带有地理位置信息的func参数:
var setLocationUpdates = function(func) {
var onUpdate = function(position)
{
if(!position)
func(null);
else
{
var lat = parseFloat((position.coords) ? new String(position.coords.latitude) : position.x);
var lng = parseFloat((position.coords) ? new String(position.coords.longitude) : position.y);
func({
loc: [lat, lng],
accuracy: position.coords.accuracy,
altitude: position.coords.altitude,
speed: position.coords.speed,
altitudeAccuracy: position.coords.altitudeAccuracy,
heading: position.coords.heading,
date: new Date()
});
}
};
if(navigator.geolocation)
navigator.geolocation.watchPosition(
onUpdate,
function(error) { },
{
maximumAge: 10000,
timeout: 5000,
enableHighAccuracy: true
});
};
以千米为单位计算距离:
var distance = function(point)
{
var toRad = function(value) { return value * Math.PI / 180; };
if(!(point instanceof mod.LatLng))
throw "GeospatialJS.LatLng object expected";
var R = 6371; // km
var dLat = toRad((point.lat()-this.lat()));
var dLon = toRad((point.lng()-this.lng()));
var lat1 = toRad(this.lat());
var lat2 = toRad(point.lat());
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c;
return d;
};