我的浏览器使用的Chrome,然后在js中获取的经纬度,处理之后,用天地图打开,和我当前的位置有一定偏离
function getCurrentLocation() {
// 检查浏览器是否支持地理定位
if (!navigator.geolocation) {
alert("您的浏览器不支持地理定位功能。");
return;
}
// 调用浏览器的地理定位API
navigator.geolocation.getCurrentPosition(
// 定位成功的回调函数
function(position) {
// 从返回的数据中获取WGS84坐标系的经纬度
var wgs84Lng = position.coords.longitude;
var wgs84Lat = position.coords.latitude;
console.log("原始WGS84坐标: ", wgs84Lng, wgs84Lat);
var gcj02Point = wgs84ToGcj02(wgs84Lng, wgs84Lat);
var point = new T.LngLat(gcj02Point[0]+0.0002, gcj02Point[1]-0.0010);
var map = new T.Map("container");
// 关键步骤5: 将地图中心移动到定位点 :cite[1]
map.centerAndZoom(point, 16);
var marker = new T.Marker(point);
map.addOverLay(marker);
},
// 定位失败的回调函数 :cite[5]
function(error) {
var errorMessage = "";
switch(error.code) {
case error.PERMISSION_DENIED:
errorMessage = "用户拒绝了地理定位请求。请授权位置权限并刷新页面重试。";
break;
case error.POSITION_UNAVAILABLE:
errorMessage = "无法获取当前位置信息。可能是网络或GPS问题。";
break;
case error.TIMEOUT:
errorMessage = "获取位置信息超时。";
break;
default:
errorMessage = "发生未知错误。";
}
// console.error(error);
},
// 定位选项(可选):cite[5]
{
enableHighAccuracy: true, // 尝试获取更精确的位置(如GPS)
timeout: 10000, // 超时时间设为10秒
maximumAge: 300000 // 缓存位置的最大有效期(5分钟)
}
);
}
function wgs84ToGcj02(lng, lat) {
if (outOfChina(lng, lat)) {
return [lng, lat];
}
// 使用更精确的转换参数
let dLat = transformLat(lng - 105.0, lat - 35.0);
let dLng = transformLng(lng - 105.0, lat - 35.0);
const radLat = lat / 180.0 * PI;
let magic = Math.sin(radLat);
magic = 1 - EE * magic * magic;
const sqrtMagic = Math.sqrt(magic);
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
dLng = (dLng * 180.0) / (A / sqrtMagic * Math.cos(radLat) * PI);
const mgLat = lat + dLat;
const mgLng = lng + dLng;
return [mgLng, mgLat];
}
PC浏览器获取的经纬度本身就不准。