移动设备的地理位置
Posted
技术标签:
【中文标题】移动设备的地理位置【英文标题】:Geolocation for mobile devices 【发布时间】:2015-12-23 12:39:07 【问题描述】:我在我的网站上的 idevices 上遇到地理定位问题。
其实我只需要获取纬度/经度坐标。 在 PC 上,android 设备上一切都很酷,在 iphone 上也很好,但前提是我使用 wifi 连接。但是当我使用旧 iPhone 5s 使用 3g 或 LTE 时,我什么也得不到(但从 iphone 6 开始它可以工作)。
我了解到,如果 wifi 关闭,Safari 将不支持地理定位。 但我仍然需要让它在 iPhone 4,5 等 iDevices 上运行。 我正在使用这段示例代码:
<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;
</script>
【问题讨论】:
好吧,我自己找到了解决方案,但它可能对其他人有用,因为我见过很多类似的线程。要强制在具有无线连接的设备(在我的情况下是 iPhone)上进行地理定位工作,您必须打开浏览器 (Safari) 的定位服务。据我了解,新型号默认启用此选项。所以当我这样做时,它对我来说就像一种魅力, 【参考方案1】:我是 iPhone 5S 的拥有者,我尝试过通过 3G 进行地理定位,它就像一个魅力。我已经通过 Wifi 和 3G 尝试了这个CodePen,没有任何问题。
$(document).ready(function()
setInterval(function()
getLocation(function(position)
//do something cool with position
currentLat = position.coords.latitude;
currentLng = position.coords.longitude;
$("#status").html(currentLat + " " + currentLng);
);
, 1000);
);
var GPSTimeout = 10; //init global var NOTE: I noticed that 10 gives me the quickest result but play around with this number to your own liking
//function to be called where you want the location with the callback(position)
function getLocation(callback)
if (navigator.geolocation)
var clickedTime = (new Date()).getTime(); //get the current time
GPSTimeout = 10; //reset the timeout just in case you call it more then once
ensurePosition(callback, clickedTime); //call recursive function to get position
return true;
//recursive position function
function ensurePosition(callback, timestamp)
if (GPSTimeout < 6000)
//call the geolocation function
navigator.geolocation.getCurrentPosition(
function(position) //on success
//if the timestamp that is returned minus the time that was set when called is greater then 0 the position is up to date
if (position.timestamp - timestamp >= 0)
GPSTimeout = 10; //reset timeout just in case
callback(position); //call the callback function you created
else //the gps that was returned is not current and needs to be refreshed
GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
ensurePosition(callback, timestamp); //call itself to refresh
,
function() //error: gps failed so we will try again
GPSTimeout += GPSTimeout; //increase the timeout by itself n*2
ensurePosition(callback, timestamp); //call itself to try again
,
maximumAge: 0,
timeout: GPSTimeout
)
感谢 Chris Beckett 提供示例。
如果你还不能让它工作,也许你可以提供更多细节?
Ps:只是编辑以确保需要地理定位的每个人都检查是否启用了 Safari 的定位服务:
首先检查是否在以下位置启用了定位服务:设置 > 隐私 > 定位服务 接下来检查是否为 Safari 网站启用【讨论】:
不幸的是它对我不起作用。我的错,我提到我有 iPhone 5s,但我只有一个普通的 iPhone 5,它不能用它。 你好 Roman,我已经请了一些使用旧型号的朋友进行测试。他们有 4、4S 和 5。在 4(ios 7.1.2)中没有可用的 wifi 连接无法工作,而在 4S(iOS 8.4.1)中工作。我正在等待更多反馈来更新您。您的 iPhone 目前是否已更新至最新的 iOS?我的是。 这很奇怪,我在 iPhone 4 和 5 上测试过,但都失败了。在您发表评论后,我已经让我的 4s 同事尝试了它,但它也失败了。哦,等等,这取决于你什么时候尝试过。我有一个针对 iDevices 的修复程序,当它看到 iPhone 时,它会通过 IP 搜索位置,但我们不得不取消它,因为它绝对不精确。 我不明白你所说的这个修复是什么意思。请你澄清一下好吗?另外,您的解决方案是否在我可以访问的链接上运行,以便我可以尝试一下?问候。 我为 iDevices 使用了 ipinfo.io 服务以上是关于移动设备的地理位置的主要内容,如果未能解决你的问题,请参考以下文章