部署到服务器后地图定位失败的主要原因:
https:// 协议localhost 或 127.0.0.1(开发环境)file:// 协议(本地文件)PERMISSION_DENIED 错误this.geolocation 为 null,定位失败maximumAge: 300000),可能导致使用过期位置这是最彻底的解决方案,也是生产环境的标准做法。
server {
listen 80;
server_name yourdomain.com;
# 重定向到 HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
root /path/to/your/dist;
try_files $uri $uri/ /index.html;
}
}
如果暂时无法启用 HTTPS,可以使用高德的 IP 定位功能(精度较低,约 1-5 公里)。
修改高德定位配置:
this.geolocation = new AMap.Geolocation({
enableHighAccuracy: false, // 关闭高精度定位
timeout: 10000,
maximumAge: 0,
convert: true,
showButton: false,
showMarker: false,
showCircle: false,
panToLocation: false,
zoomToAccuracy: false,
noIpLocate: 0, // 允许使用 IP 定位
GeoLocationFirst: false // 优先使用 IP 定位
})
你的代码中已经实现了设备实时位置轮询(setupRealtimePolling),可以作为主要定位方式:
已对你的代码做了以下优化:
tryAutoLocation() 方法,确保插件就绪后再定位maximumAge: 0),确保获取最新位置# 启动开发服务器
npm run dev:h5
http://localhost:xxxxhttp://your-server-iphttps://your-domain.com打开浏览器开发者工具(F12),查看 Console 标签:
[job-create] 创建地图使用默认中心点: [113.382, 22.5211]
[job-create] 高德定位插件加载完成
[job-create] 开始自动定位...
[job-create] 开始调用高德定位 getCurrentPosition...
[job-create] 定位回调 status: error result: {...}
在控制台输入:
console.log('isSecureContext:', window.isSecureContext)
console.log('protocol:', window.location.protocol)
在控制台输入:
navigator.geolocation.getCurrentPosition(
pos => console.log('成功:', pos),
err => console.log('失败:', err)
)
根据你的实际情况选择:
http://192.168.x.x),但定位精度低