本地项目正常启动(http)
浏览器 | 浏览器定位 getCurrentPosition | IP定位 LocalCity | H5浏览器定位 |
---|---|---|---|
谷歌浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 无法使用 |
搜狗浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 无法使用 |
火狐浏览器 | http IP地址下无法使用 | 正常,精确到市 | localhost下正常 |
谷歌和搜狗浏览器
H5浏览器定位
用IP地址访问
用localhost访问
火狐浏览器
H5浏览器定位
用IP地址访问
用localhost访问
本地项目以https启动,不用证书
如何以https启动?
creat-react-app项目
修改pakage.json文件
需要安装 cross-env yarn add cross-env
同下
umi项目
修改配置文件,.umirc.ts或者config.js
浏览器 | 百度地图浏览器定位 getCurrentPosition | 百度地图IP定位 LocalCity | H5浏览器定位 |
---|---|---|---|
谷歌浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 访问不了 |
搜狗浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 访问不了 |
火狐浏览器 | 正常,精确到门牌号 | 正常,精确到市 | 正常,精确到市门牌号 |
谷歌和搜狗浏览器
谷歌浏览器
搜狗浏览器
火狐浏览器
本地项目https启动,用本地自签名CA证书认证
怎么用本地自签名CA证书认证 ?
window umi react项目使用mkcert自签名证书实现本地https访问
浏览器 | 百度地图浏览器定位 getCurrentPosition | 百度地图IP定位 LocalCity | H5浏览器定位 |
---|---|---|---|
谷歌浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 访问不了 |
搜狗浏览器 | 精确度不够,只能定位到市 | 正常,精确到市 | 访问不了 |
谷歌和搜狗浏览器
火狐浏览器不支持本地自签CA证书
代码
// 原生浏览器定位,得到GPS坐标,原始的GPS WGS-84系坐标
const handelBrowserLocation = () => {
const option = {
enableHighAccuracy: true, //设置提升定位的精准度
maximumAge: 0, //禁用缓存
timeout: 30000 //开始获取定位信息30秒后超时
};
const showPosition = (position) => {
var lat = position.coords.latitude; //获取纬度
var lng = position.coords.longitude; //获取经度
console.log(position);
console.log("您的经度是:" + lng + ",纬度是:" + lat);
gpsToBMap(lng, lat);
};
const showError = (error) => {
console.log(error);
switch (error.code) {
case error.PERMISSION_DENIED:
alert("您拒绝了地理定位服务");
break;
case error.POSITION_UNAVAILABLE:
alert("无法获取您的位置");
break;
case error.TIMEOUT:
alert("超时");
break;
}
};
if (navigator.geolocation) { //判断是否支持Geolocation API
navigator.geolocation.getCurrentPosition(showPosition, showError, option)
}
};
// GPS坐标 => 百度坐标
const gpsToBMap = (lng, lat) => {
const BMapPoint = new BMap.Point(lng, lat);
//坐标转换完之后的回调函数
const translateCallback = function (data){
if(data.status === 0) {
// handleDistance(data.points[0])
}
};
var convertor = new BMap.Convertor();
var pointArr = [];
pointArr.push(BMapPoint);
convertor.translate(pointArr, 1, 5, translateCallback)
};
// 百度地图浏览器定位
const handelBdBrowserLocation = () => {
const Geo = new BMap.Geolocation(); // 创建地址解析器实例
const successCallback = function(res) { // 会弹窗获取定位权限
if(this.getStatus() === BMAP_STATUS_SUCCESS){
console.log('百度地图浏览器定位');
console.log(res);
// handleDistance(res.point);
}
else {
console.log('百度地图IP定位');
handelIpLocation();
}
};
const options = {
enableHighAccuracy: true, // 是否要求浏览器获取最佳效果
timeout: 5000, // 超时事件,单位为毫秒。默认为10秒
maximumAge: 0, // 允许返回指定事件内的缓存结果,单位为毫秒。如果为0,则每次请求都获取最新的定位结果。默认为10分钟
};
Geo.getCurrentPosition(successCallback, options);
};
// IP定位,城市级别定位
const handelIpLocation = () => {
function myFun(result){
console.log(result);
const cityName = result.name;
// addressToPoint(cityName);
}
const myCity = new BMap.LocalCity();
myCity.get(myFun);
};