众所周知,在移动端app中,iOS定位和安卓定位都可以使用GPS,配合着高德,百度,腾讯的api可以很方便的处理定位,导航,路线规划等一系列问题,但是对于H5端的定位情况,却有些复杂.

浏览器定位是否能调GPS辅助?路线规划,精细定位是否准确?这些问题需要一一探索

一.浏览器IP定位

浏览器ip定位是一种粗略的,只能获取到当前城市的定位方式,最简单的有两种方式:

1:使用浏览器自带 geolocation 方法,获取IP和当前IP的大致经纬度,代码如下:

if (navigator.geolocation)navigator.geolocation.getCurrentPosition(showPosition, showError);else console.log("该浏览器无法获取IP");function showPosition(position: object) {console.log(position);
}function showError(error: object) {console.log("H5错误编码  " + error.code);
}

2.使用各大厂商的ip定位服务,免费版每天限额大概5000个,其原理是向厂商发送一条请求,请求会携带自身IP,返回值包含该IP的详细信息,:https://restapi.amap.com/v3/ip?key="自己申请的key".

以下代码以高德地图为例:

import axios from "axios";//引入axiosaxios.get("https://restapi.amap.com/v3/ip?key=你申请的key").then((res: object) => {console.log(res)});

二.浏览器精确定位

浏览器的精确定位就需要使用厂商的API接口:高德开放平台 | 高德地图API,其中开发文档,API都很详细,可以前往查看使用.

下面我以vue3+高德地图API的形式展示:

首先npm安装依赖 :   npm i @amap/amap-jsapi-loader --save

1.创建地图面板,初始化地图:

import AMapLoader from "@amap/amap-jsapi-loader";import { reactive,onMounted } from "vue";import { shallowRef } from "@vue/reactivity";const map = shallowRef(null);//地图面板const Map = reactive({myMap: {}, //把AMap中的方法保存在浏览器lng:"",lat:""
});//
const initMap = () => {AMapLoader.load({key: "你的key", // 申请Web端开发者Keyversion: "2.0", // 指定要加载的 JSAPI 的版本plugins: ["AMap.Geolocation",], // 需要使用的的插件列表,此处以定位为例}).then((AMap) => {Map.myMap = AMap;//保存获取到的方法//初始化地图房源地图map.value = new AMap.Map("container", //绑定container
{enableHighAccuracy: true, //是否使用高精度定位,默认:trueresizeEnable: true,viewMode: "3D", //是否为3D地图模式zoom: 16, //初始化地图级别//center: [Map.lng, Map.lat], //初始化地图中心点位置// zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点});//调用获取定位方法getGeolocation();});
};//地图定位
function getGeolocation() {var Geolocation = new Map.myMap.Geolocation({enableHighAccuracy: true, //是否使用高精度定位,默认:truetimeout: 10000, //超过10秒后停止定位,默认:5s// position: "RB", //定位按钮的停靠位置// offset: [10, 240], //定位按钮与设置的停靠位置的偏移量,默认:[10, 20]panToLocation: false,});map.value.addControl(Geolocation);Geolocation.getCurrentPosition(function (status: any, result: any) {if (status == "complete") {onComplete(result);} else {onError(result);}});
}//解析定位结果
function onComplete(data: any) {console.log(data);map.lat = data.position.lat;map.lng = data.position.lng;
}
//解析定位错误信息
function onError(data: any) {console.log(data);
}
onMounted(() => {initMap();
});
<template>
<div id="container">
</div>
</template>

如果不需要地图面板,不添加map.value即可,代码如下:

import AMapLoader from "@amap/amap-jsapi-loader";
import { reactive,onMounted } from "vue";const Map = reactive({myMap: {}, //把AMap中的方法保存在浏览器lng:"",lat:""
});//
const initMap = () => {AMapLoader.load({key: "你的key", // 申请Web端开发者Keyversion: "2.0", // 指定要加载的 JSAPI 的版本plugins: ["AMap.Geolocation",], // 需要使用的的插件列表,此处以定位为例}).then((AMap) => {Map.myMap = AMap;//保存获取到的方法//调用获取定位方法getGeolocation();});
};//地图定位
function getGeolocation() {var Geolocation = new Map.myMap.Geolocation({enableHighAccuracy: true, //是否使用高精度定位,默认:truetimeout: 10000, //超过10秒后停止定位,默认:5s});Geolocation.getCurrentPosition(function (status: any, result: any) {if (status == "complete") {onComplete(result);} else {onError(result);}});
}
//解析定位结果
function onComplete(data: any) {console.log(data);map.lat = data.position.lat;map.lng = data.position.lng;
}
//解析定位错误信息
function onError(data: any) {console.log(data);
}onMounted(() => {initMap();
});

三.高德地图路线规划

路线规划即导航功能,高德地图支持汽车,骑行,步行,打车等方案的路线规划,分为展示端和web端

1.展示端:展示在地图map中,高德地图定义过ui,也可以自己定制

插件

plugins: [

"AMap.Walking",//步行

”AMap.Transfer“,//公交

“AMap.Riding”  //骑行

"AMap.Driving",//驾车

], // 需要使用的的插件列表,如比例尺'AMap.Scale'等

本次以驾车行驶展示示例,代码如下:

import AMapLoader from "@amap/amap-jsapi-loader";import { reactive,onMounted } from "vue";import { shallowRef } from "@vue/reactivity";const map = shallowRef(null);//地图面板const Map = reactive({myMap: {}, //把AMap中的方法保存在浏览器lng:"",lat:""
});//
const initMap = () => {AMapLoader.load({key: "你的key", // 申请Web端开发者Keyversion: "2.0", // 指定要加载的 JSAPI 的版本plugins: ["AMap.Driving",], // 需要使用的的插件列表,此处以驾车为例子}).then((AMap) => {Map.myMap = AMap;//保存获取到的方法//初始化地图房源地图map.value = new AMap.Map("container", //绑定container
{enableHighAccuracy: true, //是否使用高精度定位,默认:trueresizeEnable: true,viewMode: "3D", //是否为3D地图模式zoom: 16, //初始化地图级别//center: [Map.lng, Map.lat], //初始化地图中心点位置// zoomToAccuracy: true, //定位成功后是否自动调整地图视野到定位点});});
};//汽车导航路线规划
function getDriving() {console.log("我是汽车导航");Driving = new Map.myMap.Driving({map: map.value, //地图hideMarkers: false,  //自定义起点终点图标,默认falsepolicy: Map.myMap.DrivingPolicy.LEAST_TIME,//驾车策略,可选择最快,最经济,最近});//传入起点坐标,终点坐标,也可以添加图经点Driving.search([lng, lat],//起点坐标,可通过上面getGeolocation()获取[lng, lat],//终点坐标,服务器获取终点,也可自己设置function (status: any, result: any) {console.log("result", result);});
}<template>
<div id="container">
</div>
</template>

2.web端:通过接口调用,传入开始和结束的坐标或者名称,以对象的形式返回路线方案.代码如下:

路径规划 2.0-API文档-开发指南-Web服务 API | 高德地图API web路线规划文档

import axios from "axios";axios({method: "get",url: "https://restapi.amap.com/v5/direction/driving",params: {key: "你的key",origin: `lng,lat`,//起点destination: `lng,lat`,//终点strategy: "2,0,3",show_fields: "cost",//需要增加的字段},}).then((res: any) => {if (res.status == 1) {console.log("res", res);}});

四.跳转高德地图

我们在定位导航的最后一步,一般是跳转高德地图app,在app内部导航,这是一个很简单的方式.

只需要填写起点,终点,通过mode选择出行方式

//跳转高德地图appfunction getloaction() {window.open("https://uri.amap.com/navigation?from=`lng,lat`,startpoint&to=`lng,lat`,endpoint&mode=car&callnative=1");
}

五.总结

总的来说,各个地图厂商把API封装的都很不错,不过对于各个机型可能会有差异,比如跳转高德地图APP,鸿蒙系统的手机跳转不了等,还需要慢慢发现.

纸上看来终觉浅,欲知此事要躬行,赶快写起来吧!

H5之vue3+高德地图api相关推荐

  1. Vue3 Echarts散点图+高德地图+卫星地图(一)——获取高德地图API

    前言:在开发的过程中,对于Vue3的情况下,对于Echarts地图的文章操作很少,并且官方不通俗易懂,所以在此进行记录探索过程.还是一如既往贴近直接C/V操作,如果对于Echarts基本配置不会的同学 ...

  2. uniapp H5端使用高德地图完成路线规划

    本项目是H5端,APP端地图的使用方法请参考我的另一篇博客uniapp,map地图组件打包原生APP 首先到高德地图API,申请web端key 参考高德H5端教程开始写代码高德地图JS API 1.准 ...

  3. 高德地图API获取当前位置对应的周边信息

    一.前言 当前公司开发计划做一个打卡功能,获取用户信息地理信息后,提供列表给客户选择打卡地点(200米范围内).自己今天对三家地图开放者平台文档进行了查看比较(腾讯.百度.高德),目前实现的方法采用的 ...

  4. 十分钟玩转 vue3+高德地图AMap+geojson批量绘制Polygon地块数据展示【二、创建地图】

    十分钟玩转 vue3+高德地图AMap+geojson批量绘制Polygon地块数据展示[二.创建地图] 在template标签内创建下列DOM 1.在template标签内,创建container的 ...

  5. Vue+高德地图API的使用

    浏览器搜索 高德开放平台 或者 高德地图API 链接地址:https://lbs.amap.com/ 二.创建Vue项目 Vue2跟Vue3的差别不大,用哪个都可以 使用npm 安装 高德地图 按 N ...

  6. 高德地图markevents_GitHub - mingxuWang/Map: 高德地图API二次封装

    Map组件设计文档 组件设计目的 分析当前各业务方向(销售端.商城.数据可视化.TMS)内地图相关应用的地图功能使用情况,封装Map组件供给各业务向进行使用. 将高德地图API进行二次封装,降低地图相 ...

  7. 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:利用地图API都能做些什么应用呢?应用商店里所有的分类,都可以结合上LBS来丰富应用.除了传统的生活服务应用,还有新潮的 ...

  8. 高德地图API路径规划结果清除

    关于高德地图API之路径规划结果的清除(js API) 偶然用到高德地图API做路径规划,在做的过程中发现连续进行不同的路径规划产生的结果是叠加的.如何清除上一次的路径规划呢?开发手册上有一个 cle ...

  9. html高德地图api使用教程,高德地图API如何使用?

    这个很简单,需要先注册一下高德地图开发者,然后创建应用.添加Key,最后通过script标签引入网页,就可以直接使用高德地图API了,下面我简单介绍一下实现过程,主要内容如下: 1.首先,注册高德地图 ...

最新文章

  1. css 填坑常用代码分享
  2. python读取yuv
  3. python strip() 函数探究
  4. nyoj359Delete it
  5. python 贪吃蛇大作战_python实现简单贪吃蛇游戏
  6. 使用electron-builder对Electron项目进行打包
  7. 易语言查询Windows API之网络函数消息函数
  8. ListView的优化
  9. VS2010调试——“StdAfx.h“文件打不开
  10. python键盘输入字典类型_python数据类型——字典类型
  11. reviewboard mysql_Linux ReviewBoard安装与配置
  12. redis-CacheCloud
  13. 第二章 指令:计算机的语言
  14. 逃跑h5小游戏源码熊出没手机游戏
  15. robotstudio机器人应用实践(码垛搬运工作站)
  16. DNS:快速搭建公司内网DNS解析服务器
  17. 音频编码-G.711
  18. mysql中的不等于_sql中怎么表示“不等于”(数据库,SQL)
  19. oracle11g sga分配,Oracle11gsga_target参数设置
  20. 大数据入门培训之大数据开发基础知识学习

热门文章

  1. [AMBA]AHB总线协议简介
  2. oracle根据日期显示星期几,Oracle获取周几以及每周对应得开始日期和结束日期
  3. 图片无损放大,实现效果还是用嗨格式图片无损放大
  4. html ios风格日历,仿IOS移动端日历
  5. 数据库处理中的begin transaction 命令
  6. [天池竞赛系列]IJCAI-17 口碑商家客流量预测冠军思路
  7. SpringCloud之配置中心
  8. 奶茶杯上贴的标签是如何制作出来的
  9. 医药采购之操作权限拦截器
  10. 可行性研究的成本估算方法