地理位置和计算从当前纬度/液化天然气到另一纬度/液化石油气的距离
Geolocation and calculating distance from current lat/lng to another lat/lng
这个函数是异步的,这是我在这种情况下遇到的大部分问题。
我想得到我所在位置的当前经度和纬度,这样我就可以在distanceFromCurrent
函数中使用它们来计算我当前位置和给定georss
点之间的距离。
除了不能在异步函数之外使用currLat
和currLong
之外,一切都很好。
function getCurrentPosition(){
navigator.geolocation.getCurrentPosition(getCoords, getError);
}
function getCoords(position){
var currLat = position.coords.latitude;
var currLon = position.coords.longitude;
}
function getError(error) {
alert("Error");
}
// convert degrees to radians
Number.prototype.toRad = function()
{
return this * Math.PI / 180;
}
这是一个计算georss
和当前纬度和经度之间距离的函数,它可以像目前一样使用设置的纬度/经度。
function distanceFromCurrent(georss)
{
getCurrentPosition();
var currLat = 3.0;
var currLon = 4.0;
georss = jQuery.trim(georss);
var pointLatLon = georss.split(" ");
var pointLat = parseFloat(pointLatLon[0]);
var pointLon = parseFloat(pointLatLon[1]);
var R = 6371; //Radius of the earth in Km
var dLat = (pointLat - currLat).toRad(); //delta (difference between) latitude in radians
var dLon = (pointLon - currLon).toRad(); //delta (difference between) longitude in radians
currLat = currLat.toRad(); //conversion to radians
pointLat = pointLat.toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(currLat) * Math.cos(pointLat);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); //must use atan2 as simple arctan cannot differentiate 1/1 and -1/-1
var distance = R * c; //sets the distance
distance = Math.round(distance*10)/10; //rounds number to closest 0.1 km
return distance; //returns the distance
}
那么,有人有什么想法/解决方案可以用不同的方式来解决这个问题吗?还是我完全错了?
如果下面的调用是none-blocking,那么这根本不起作用。
navigator.geolocation.getCurrentPosition(getCoords, getError);
调用它的方式意味着getCurrentPosition()的结果在到达distance FromCurrent()方法的末尾之前不会完成。
相反,您可以执行以下操作,并调用update()而不是distanceFromCurrent()。这将最终调用具有当前lat/lng值的distanceFromCurrent()方法。
注意:以下是psuedo代码,我怀疑它是否会正确传递您的geoss值。
update()
{
getCurrentPosition();
}
function getCurrentPosition(){
navigator.geolocation.getCurrentPosition(getCoords, getError);
}
function getCoords(position){
var currLat = position.coords.latitude;
var currLon = position.coords.longitude;
distanceFromCurrent(georss, lat, lng);
}
function distanceFromCurrent(georss, lat, lng)
{
// Remove -> getCurrentPosition();
var currLat = lat;
var currLon = lng;
georss = jQuery.trim(georss);
...
}
在distanceFromCurrent函数中添加参数,并在回调中调用它,其中geoss是全局变量:
var georss = "43.12 7.12";
function getCoords(position){
var currLat = position.coords.latitude;
var currLon = position.coords.longitude;
var distance = distanceFromCurrent(lat, lon, georss);
}
和
function distanceFromCurrent(georss, currLat, currLon){
// getCurrentPosition();
// var currLat = 3.0;
// var currLon = 4.0;
georss = jQuery.trim(georss);
var pointLatLon = georss.split(" ");
//....
getCorrentPosition是异步的。您需要发送一个指针作为第一个参数,指向将处理数据的函数。示例
navigator.geolocation.getCurrentPosition(function(position) {
var latitude = position.coords.latitude
var longitude = position.coords.longitude;
distanceFromCurrent(currLatitude, currLongitude, latitude, longitude);
});
这应该是一个很好的开始方式。
问题是你试图用错误的方式解决你的问题。您应该调用getCurrentPosition并处理其中所有返回的数据。也许像这样的东西(对函数进行一些更改)可以起到作用。
请记住,javascript从不睡眠(没有睡眠),因此所有"现在"无法完成的事情都需要推迟。这种方法就是这样。您需要考虑将回调发送到函数,而不是返回。因为我没有你所有的代码,我不知道如何转换它。但基本上你需要:
function distanceFromCurrent(georss, callback)
{ //...
您可以在此处查看完整信息:https://developer.mozilla.org/en-US/docs/Using_geolocation
- “可绘制地图”设置地图选项“纬度-经度”
- 如何用javascript获取谷歌地图的经度和纬度
- 使用API在我的网站Google-Map上显示搜索地址的纬度和经度
- 使用传单在地图框上显示纬度和经度
- 如何使用谷歌地图中的纬度和经度搜索附近的位置
- 如何在不重新加载整个网页的情况下动态更改经度和纬度的值
- 地理位置和计算从当前纬度/液化天然气到另一纬度/液化石油气的距离
- 如何通过javascript从jsongooglemapapi中获取地理编码纬度和经度
- 如何使用XML中的经度和纬度值在地图上显示位置
- 谷歌地图 api 动态获取纬度和液化天然气
- 为什么纬度结果对象从谷歌地图 API 更改
- 使用地图框 API 将邮政编码转换为纬度和经度
- 如何从地理编码地址查找纬度液化天然气
- 在 PHP 或 JavaScript 中获取用户的纬度和经度,以便在 PHP 中使用
- 给定带有位置“loc”的链接,搜索使用谷歌地图API从标记中提取纬度和经度
- 从地理定位字符串中提取纬度/液化
- 在数据库上发布长和纬度
- 世界的最大纬度和长边界 - 谷歌地图API LatLngBounds().
- 在钛地图中计算纬度增量和经度增量[Android]
- 我需要从单击事件在数据库中插入纬度和经度,但是当我单击时,我在数据库中得到了零值,而不是实际值