当我尝试使用此代码获取我的位置时,我一直收到“Permission Denied”:
function initialize() {
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
if(geo_position_js.init()) {
var waiting_time = $('#getting-position').html('Försöker att hitta din aktuella position. Var god vänta...');
t = setTimeout(function() {
waiting_time.html('Det tar längre tid att hitta din position, än vad det egentligen borde göra.<br><br><b>Tips</b><br>GPS-mottagaren har lättare att hitta dig om du är utomhus. Täta moln som till exempel vid ett åskoväder, kan göra det svårare för satelliterna att hämta din position.');
}, 60000);
geo_position_js.getCurrentPosition(show_position, function() {
clearTimeout(t);
$('#getting-position').html('<b>Ett fel uppstod</b><br>Din position kunde inte hittas. Se till att vara utomhus för bästa möjliga resultat och försök igen.');
}, {
enableHighAccuracy: true
});
} else {
$('#getting-position').html('<b>Ett fel uppstod</b><br>Det verkar som att din webbläsare inte tillåter GPS-positionering.');
}
}
function show_position(p) {
$('.map-fullsize').show();
$('#weather-map').show();
$('#weather-data').show();
$('#getting-position').hide();
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showError, function(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var accuracy = position.coords.accuracy;
var speed = position.coords.speed;
var altitude = position.coords.altitude;
var heading = position.coords.heading;
var coords = new google.maps.LatLng(latitude, longitude);
var mapOptions = {
center: coords,
streetViewControl: false,
mapTypeControl: true,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.SMALL,
position: google.maps.ControlPosition.TOP_LEFT
},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(
document.getElementById('weather-map'), mapOptions
);
var marker = new google.maps.Marker({
position: coords,
map: map
});
var circle = new google.maps.Circle({
center: coords,
radius: accuracy,
map: map,
fillColor: '#3333ff',
fillOpacity: 0.4,
strokeColor: '#3333ff',
strokeOpacity: 0.8,
strokeWeight: 1
});
map.setCenter(coords);
if(accuracy > 30) {
map.fitBounds(circle.getBounds());
} else {
map.setZoom(14);
}
$('#weather-data').load('jquery-fetch/fetch-weatherdata.php?coor=' + latitude.toFixed(6).replace(/\./, '') + ',' + longitude.toFixed(6).replace(/\./, '') + '&coordinates=' + latitude.toFixed(6) + ',' + longitude.toFixed(6) + '&accuracy=' + accuracy + '&speed=' + speed + '&altitude=' + altitude + '&heading=' + heading);
});
} else {
alert('Geolocation API stöds inte i din webbläsare');
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#permission-denied').show();
break;
case error.POSITION_UNAVAILABLE:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#position-unavailable').show();
break;
case error.TIMEOUT:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#timeout').show();
break;
case error.UNKNOWN_ERROR:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#unknown-error').show();
break;
}
}
}
$(document).ready(function() {
initialize();
});
我找不到这个代码有什么问题,而这个有趣的是代码在我获得“Permission Denied”之前获取我的GPS位置。这个问题是对my previous question的“跟进”。我该如何解决我的问题?
提前致谢。
答案 0 :(得分:0)
您正在使用
navigator.geolocation.getCurrentPosition(showError, function(position) {...})
getCurrentPosition的specification以其他顺序显示功能。这样做的原因是只有成功回调是强制性的;它必须先来。如果提供了第二个参数,那就是错误回调。第三个参数是选项对象。
答案 1 :(得分:0)
只有两件事;
i)测试这个我简化了你的代码,修复了一些小问题并删除了对geo.js的依赖。
ii)地理位置仅在网站托管在外部http://服务器
上时才有效<html>
<body>
<div id='map' class='map-fullsize'></div>
<div id='weather-map'></div>
<div id='weather-data'></div>
<div id='getting-position'></div>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type='text/javascript'>
function initialize() {
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
var waiting_time = $('#getting-position').html('Försöker att hitta din aktuella position. Var god vänta...');
get_position();
t = setTimeout(function () {
$('#getting-position').html('Det tar längre tid att hitta din position, än vad det egentligen borde göra.<br><br><b>Tips</b><br>GPS-mottagaren har lättare att hitta dig om du är utomhus. Täta moln som till exempel vid ett åskoväder, kan göra det svårare för satelliterna att hämta din position.');
}, 60000);
}
function get_position() {
$('#getting-position').html("get_position()");
$('.map-fullsize').show();
$('#weather-map').show();
$('#weather-data').show();
// $('#getting-position').hide();
if(navigator.geolocation) {
$('#getting-position').html("navigator.geolocation");
navigator.geolocation.getCurrentPosition(showPosition, showError, { enableHighAccuracy: true });
} else {
alert('Geolocation API stöds inte i din webbläsare');
}
}
function showPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var accuracy = position.coords.accuracy;
var speed = position.coords.speed;
var altitude = position.coords.altitude;
var heading = position.coords.heading;
$('#getting-position').html(
"have position" +
" latitude = " + latitude.toString() +
" longitude = " + longitude.toString()
);
/* Add marker to Google maps etc... */
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#permission-denied').show();
break;
case error.POSITION_UNAVAILABLE:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#position-unavailable').show();
break;
case error.TIMEOUT:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#timeout').show();
break;
case error.UNKNOWN_ERROR:
$('.map-fullsize').hide();
$('#weather-map').hide();
$('#weather-data').hide();
$('#unknown-error').show();
break;
}
}
$(document).ready(function() {
initialize();
});
</script>
</body>
</html>