飞道的博客

vue(移动端)使用高德地图实现精准定位

505人阅读  评论(0)

目录

效果图

 前提准备

代码展示


效果图

两个页面

页面一(粗略定位)

点击城市进入页面二 (粗略定位),搜索框输入具体位置(以大连理工大学为例)

 点击大连理工大学,回到页面一,并展示精准位置

再次点击位置,进入页面二精准定位地图

 前提准备

一、vue项目

二、移动端配置(不配置也可用)

vue移动端适配

三、高德地图创建应用获取key及使用前配置

见如下文章,一、创建应用获取key,二、配置

vue移动端高德地图的使用及实现最简单的地图功能

代码展示

页面一(路由:path:"/home")


  
  1. <template>
  2. <div>
  3. <router-link to="/map">{{ cityText }} </router-link>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. data( ){
  9. return{
  10. cityText: ""
  11. }
  12. },
  13. mounted( ) {
  14. var that= this;
  15. if(that. $store. state. cityinfo. name){
  16. that. cityText=that. $store. state. cityinfo. name
  17. return
  18. }
  19. // eslint-disable-next-line no-undef
  20. AMap. plugin( 'AMap.CitySearch', function ( ) {
  21. // eslint-disable-next-line no-undef
  22. var citySearch = new AMap. CitySearch()
  23. citySearch. getLocalCity( function ( status, result) {
  24. if (status === 'complete' && result. info === 'OK') {
  25. // 查询成功,result即为当前所在城市信息
  26. that. cityText=result. city;
  27. console. log(result)
  28. }
  29. })
  30. })
  31. }
  32. }
  33. </script>
  34. <style scoped>
  35. </style>

页面二(路由:path:"/map")


  
  1. <template>
  2. <div class="body">
  3. <input type="text" v-model="iptVal">
  4. <ul>
  5. <li v-for="item in searchList" :key="item.id" @click="goHome(item)">{{item.name}} </li>
  6. </ul>
  7. <!-- -------------------放地图的盒子----------------------- -->
  8. <div id="box"> </div>
  9. </div>
  10. </template>
  11. <script>
  12. import {
  13. mapMutations,
  14. // mapState
  15. } from "vuex"
  16. export default {
  17. data( ){
  18. return {
  19. iptVal: "",
  20. cityText: "",
  21. searchList:[]
  22. };
  23. },
  24. watch:{
  25. //----------------------监听搜索框变化,获取有关数据-----------------
  26. iptVal( ){
  27. var that= this;
  28. // eslint-disable-next-line no-undef
  29. AMap. plugin( 'AMap.AutoComplete', function( ){
  30. var autoOptions = {
  31. //city 限定城市,默认全国
  32. city: that. cityText
  33. };
  34. // 实例化AutoComplete
  35. // eslint-disable-next-line no-undef
  36. var autoComplete= new AMap. AutoComplete(autoOptions);
  37. // 根据关键字进行搜索
  38. // eslint-disable-next-line no-undef
  39. autoComplete. search(that. iptVal, function( status, result) {
  40. // 搜索成功时,result即是对应的匹配数据
  41. console. log(result);
  42. that. searchList=result. tips;
  43. })
  44. })
  45. }
  46. },
  47. mounted( ) {
  48. var that= this;
  49. //--------------------定位-------------------------
  50. // eslint-disable-next-line no-undef
  51. AMap. plugin( 'AMap.CitySearch', function ( ) {
  52. // eslint-disable-next-line no-undef
  53. var citySearch = new AMap. CitySearch()
  54. citySearch. getLocalCity( function ( status, result) {
  55. if (status === 'complete' && result. info === 'OK') {
  56. // 查询成功,result即为当前所在城市信息
  57. that. cityText=result. city;
  58. console. log(result)
  59. }
  60. })
  61. })
  62. //如果cityinfo里存在数据,地图显示cityinfo里的地点(上一次搜索点击的地点),否则展示定位市区(pc端定位不准)
  63. if(that. $store. state. cityinfo. name){
  64. var cityInfo= this. $store. state. cityinfo;
  65. // eslint-disable-next-line no-undef
  66. var map = new AMap. Map( 'box', {
  67. zoom: 18, //级别
  68. center: [cityInfo. location. lng, cityInfo. location. lat], //中心点坐标
  69. });
  70. // eslint-disable-next-line no-undef
  71. var marker = new AMap. Marker({
  72. position:[cityInfo. location. lng, cityInfo. location. lat] //选择标记位置
  73. })
  74. map. add(marker); //将标记添加到地图
  75. return
  76. } else{
  77. // eslint-disable-next-line no-redeclare,no-unused-vars,no-undef
  78. var map = new AMap. Map( 'box', {
  79. zoom: 8, //级别
  80. });
  81. }
  82. },
  83. methods:{
  84. //点击搜索的地点,将该地点存入cityInfo,并回到首页
  85. goHome( val){
  86. this. addCityINfo(val);
  87. this. $router. push( "/home")
  88. },
  89. ... mapMutations({
  90. addCityINfo: "uptCityInfo"
  91. })
  92. }
  93. }
  94. </script>
  95. <style scoped>
  96. #box{
  97. width: 100%;
  98. height: 800px;
  99. }
  100. .body input{
  101. margin: 50px;
  102. border: 1px solid #ccc;
  103. border-radius: 10px;
  104. height: 80px;
  105. }
  106. .body ul li{
  107. text-align: left;
  108. font-size: 20px;
  109. padding: 10px;
  110. border-bottom: 1px solid #cccccc;
  111. margin: 10px;
  112. }
  113. </style>

vuex(实现跨页面传递数据)

src/store/index.js


  
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue. use( Vuex)
  4. export default new Vuex. Store({
  5. state: {
  6. cityinfo:{}
  7. },
  8. getters: {
  9. },
  10. mutations: {
  11. uptCityInfo( state,val){
  12. state. cityinfo=val;
  13. }
  14. },
  15. actions: {
  16. },
  17. modules: {
  18. }
  19. })

使用别的方法跨页面传递数据,需要对页面一二获取与存入数据进行更改

路由根据自己实际情况更改


转载:https://blog.csdn.net/qq_52126119/article/details/127984726
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场