我一直在尝试在我的一个项目中使用Google Maps API,问题是即使允许位置访问(这是一个网站项目),也没有向我显示当前的确切位置。我的意思是,它输出的是位置,但距离200米。当我尝试在同一台设备上使用Google Maps的网络版本时,会向我显示当前位置+ -20米。我们正在尝试找到确切的经度和纬度。这是 JavaScript
function getCurrentLocation() {
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
}
}
// Try HTML5 geolocation.
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
var lat_and_long = pos.lat+","+pos.lng;
$("#geocomplete").geocomplete("find", lat_and_long);
}
}
$("#geocomplete").bind("geocode:dragged", function(event, latLng){
$("input[name=lat]").val(pos.lat());
$("input[name=lng]").val(pos.lng());
$("#reset").show();
console.log(latLng);
});
console.log(pos);
function handleLocationError(browserHasGeolocation, infoWindow, pos) {
infoWindow.setPosition(pos);
infoWindow.setContent(browserHasGeolocation ?
'Error: The Geolocation service failed.' :
'Error: Your browser doesn\'t support geolocation.');
infoWindow.open(map);
}
我们正在将以下Google API与jQuery地理编码和Places自动完成插件(1.7.0)结合使用
https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyDJ2bLO-XXXXXXX"
答案 0 :(得分:6)
Google maps API根据以下来源提供位置:
GPS :通过使用卫星(最长约20米)为您提供位置信息,有时情况不佳,例如恶劣的天气,地下或您在建筑物内。
Wi-Fi :Wi-Fi网络IP地址的位置。
蜂窝塔:您与移动蜂窝网络塔的连接可以精确到数千米。
桌面浏览器::在通过Mozilla Firefox和Google Chrome位置之类的桌面浏览器浏览时,依赖于本地网络信息,例如计算机IP address
等信号。
您的浏览器会要求您共享位置,如果您允许共享,则有关附近无线接入点的信息,IP address
将共享给Google定位服务,以估算您的位置。
位置的准确性会因位置而异。
移动浏览器::Chrome,Safari,Opera等移动浏览器使用GPS sensors
而非WiFi网络。
now enableHighAccuracy
选项属性提供了一个提示,表明应用程序希望获得最佳结果。
这可能会导致响应时间变慢或功耗增加。
根据W3C的Geolocation API文档(https://w3c.github.io/geolocation-api/#high-accuracy)No guarantee is given that the API returns the device's actual location
。
Geolocation API定义了位置的高级接口 仅与托管主机的设备关联的信息 实施,例如纬度和经度。 API本身是 与基础位置信息源无关。共同 位置信息的来源包括全球定位系统 (GPS)和位置是根据网络信号(例如IP地址, RFID,WiFi和蓝牙MAC地址以及GSM / CDMA单元ID 作为用户输入。无法保证API返回设备的 实际位置。
答案 1 :(得分:0)
无法获取确切位置。每个定位方法都包含错误。 GPS是最准确的,但误差仍在几米范围内。
在JavaScript中,最好的选择是使用
function throttle(func, interval) {
var last = 0;
return function() {
var now = Date.now();
if (last + interval < now) {
last = now;
return func.apply(this, arguments);
}
};
}
parentPanel.on("keypress", ".post-purchase-amount", null, throttle(function(event) {
updateAmount($(this));
}, 800));
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = {
lat: position.coords.latitude,
lng: position.coords.longitude
};
// ...
}
}
只读属性是一个严格的正双精度,表示以米为单位的Coordinates.accuracy
和Coordinates.latitude
属性的准确性,置信度为95%。
查看详细信息here。