当前位置:   article > 正文

vue项目中使用高德地图_vue 使用高德地图

vue 使用高德地图

最近做的项目中有个地图选择的功能,如下图所示:

所以在此记录下使用方法,望各位大神指导

我的应用 | 高德控制台第一步:去高德官网去创建一个属于自己的地图应用 (得到key和秘钥)我的应用 | 高德控制台

 这是添加的方式:

准备-入门-教程-地图 JS API | 高德地图API

第二步:获取到属于自己的key和秘钥后,下载地图高德:npm install vue-amap --save 

第三步:在main.js中导入 

  1. VueAMap.initAMapApiLoader({
  2. key: '你申请的key',
  3. plugin: [
  4. 'AMap.Scale',
  5. 'AMap.OverView',
  6. 'AMap.ToolBar',
  7. 'AMap.MapType',
  8. 'AMap.PlaceSearch',
  9. 'AMap.Geolocation',
  10. 'AMap.Geocoder',
  11. 'AMap.DrivingPolicy',
  12. 'AMap.Driving',
  13. "AMap.Autocomplete",
  14. "AMap.PolyEditor",
  15. "AMap.CircleEditor",
  16. ],
  17. v: '1.4.4',
  18. uiVersion: '1.0',
  19. })

这里的key是你申请的

第四步:index.html页面头部 添加秘钥

​​​​​​​​​​​​​​

  1. <script type="text/javascript">
  2. window._AMapSecurityConfig = {
  3. securityJsCode: "你申请的秘钥",
  4. }
  5. </script>

 以上步骤完成后,就可以去你对应的页面中使用了

因为我是写的一个组件,所以大家根据自己的情况 

我的组件完整代码:

  1. <template>
  2. <div class="container">
  3. <div class="search-box">
  4. <el-row>
  5. <el-col :span="16">
  6. <el-input v-model="searchKey" id="search" placeholder="请输入地址信息"></el-input>
  7. </el-col>
  8. <el-col :span="6">
  9. <el-button type="success" plain @click="searchByHand" style="margin-left:20px">搜索位置</el-button>
  10. </el-col>
  11. </el-row>
  12. <div class="tip-box" id="searchTip"></div>
  13. </div>
  14. <el-amap class="amap-box" :amap-manager="amapManager" :vid="'amap-vue'" :zoom="zoom" :plugin="plugin"
  15. :center="center" :events="events">
  16. <!-- 标记 -->
  17. <el-amap-marker v-for="(marker, index) in markers" :position="marker" :key="index"></el-amap-marker>
  18. </el-amap>
  19. </div>
  20. </template>
  21. <script>
  22. import { AMapManager, lazyAMapApiLoaderInstance } from 'vue-amap'
  23. let amapManager = new AMapManager()
  24. export default {
  25. data() {
  26. let self = this
  27. return {
  28. address: null,
  29. searchKey: '',
  30. amapManager,
  31. markers: [],
  32. searchOption: {
  33. city: '全国',
  34. citylimit: true
  35. },
  36. center: [108.872249, 34.33328],
  37. zoom: 10,
  38. lng: 0,
  39. lat: 0,
  40. loaded: false,
  41. markerEvent: {
  42. click(e) {
  43. // console.log(e);
  44. }
  45. },
  46. mapInfo: {
  47. lng: '',
  48. lat: '',
  49. mapText: ''
  50. },
  51. events: {
  52. init() {
  53. lazyAMapApiLoaderInstance.load().then(() => {
  54. self.initSearch()
  55. })
  56. },
  57. // 点击获取地址的数据
  58. click(e) {
  59. self.markers = []
  60. let { lng, lat } = e.lnglat
  61. self.lng = lng
  62. self.lat = lat
  63. self.center = [lng, lat]
  64. self.markers.push([lng, lat])
  65. // 这里通过高德 SDK 完成。
  66. let geocoder = new AMap.Geocoder({
  67. radius: 1000,
  68. extensions: 'all'
  69. })
  70. geocoder.getAddress([lng, lat], function (status, result) {//点击地图显示位置信息
  71. if (status === 'complete' && result.info === 'OK') {
  72. if (result && result.regeocode) {
  73. if (result.regeocode.crosses.length > 0) {
  74. self.mapInfo.lng = result.regeocode.crosses[0].location.lng
  75. self.mapInfo.lat = result.regeocode.crosses[0].location.lat
  76. }
  77. if (result.regeocode.crosses.length > 0) {
  78. self.mapInfo.lng = result.regeocode.pois[0].location.lng
  79. self.mapInfo.lat = result.regeocode.pois[0].location.lat
  80. }
  81. self.mapInfo.mapText = result.regeocode.formattedAddress
  82. // console.log('地图组件中点击选中的地址为',self.mapInfo)
  83. if (self.mapInfo.lng !== '' && self.mapInfo.lat !== '') {
  84. self.$store.state.addersInfo = JSON.stringify(self.mapInfo)
  85. }
  86. console.log(self.lng, self.lat, "33333333333333333")
  87. self.address = result.regeocode.formattedAddress
  88. self.searchKey = result.regeocode.formattedAddress
  89. self.$nextTick()
  90. }
  91. }
  92. })
  93. }
  94. },
  95. // 一些工具插件
  96. plugin: [
  97. {
  98. // 定位
  99. pName: 'Geolocation',
  100. events: {
  101. init(o) {
  102. // o是高德地图定位插件实例
  103. o.getCurrentPosition((status, result) => {
  104. if (result && result.position) {
  105. // 设置经度
  106. self.lng = result.position.lng
  107. // 设置维度
  108. self.lat = result.position.lat
  109. // 设置坐标
  110. self.center = [self.lng, self.lat]
  111. self.markers.push([self.lng, self.lat])
  112. // load
  113. self.loaded = true
  114. // 页面渲染好后
  115. self.$nextTick()
  116. }
  117. })
  118. },
  119. click(e) {
  120. // console.log(e);
  121. }
  122. }
  123. },
  124. {
  125. // 工具栏
  126. pName: 'ToolBar',
  127. events: {
  128. init(instance) {
  129. // console.log(instance);
  130. }
  131. }
  132. },
  133. {
  134. // 鹰眼
  135. pName: 'OverView',
  136. events: {
  137. init(instance) {
  138. // console.log(instance);
  139. }
  140. }
  141. },
  142. {
  143. // 地图类型
  144. pName: 'MapType',
  145. defaultType: 0,
  146. events: {
  147. init(instance) {
  148. // console.log(instance);
  149. }
  150. }
  151. },
  152. {
  153. // 搜索
  154. pName: 'PlaceSearch',
  155. events: {
  156. init(instance) {
  157. // console.log(instance)
  158. }
  159. }
  160. }
  161. ]
  162. }
  163. },
  164. created() {
  165. this.searchKey = JSON.parse(this.$store.state.addersInfo).mapText;
  166. },
  167. watch: {
  168. "$store.state.addersInfo": {
  169. handler: function (newVal, oldVal) {
  170. this.searchKey = JSON.parse(newVal).mapText;
  171. },
  172. deep : true
  173. },
  174. searchKey(addersText) {
  175. if (addersText == '') {
  176. this.$store.state.addersInfo = ''
  177. }
  178. }
  179. },
  180. methods: {
  181. // submitAddress() {//确定事件
  182. // console.log('经纬度', this.center)
  183. // console.log('地址', this.address)
  184. // this.mapInfo.lng = this.center[0]
  185. // this.mapInfo.lat = this.center[1]
  186. // this.mapInfo.mapText = this.address
  187. // // console.log(this.mapInfo)
  188. // this.$store.state.address = JSON.stringify(this.mapInfo)
  189. // },
  190. initSearch() {
  191. let vm = this
  192. let map = this.amapManager.getMap()
  193. AMapUI.loadUI(['misc/PoiPicker'], function (PoiPicker) {
  194. var poiPicker = new PoiPicker({
  195. input: 'search',
  196. placeSearchOptions: {
  197. map: map,
  198. pageSize: 10
  199. },
  200. suggestContainer: 'searchTip',
  201. searchResultsContainer: 'searchTip'
  202. })
  203. console.log(poiPicker, "***********")
  204. vm.poiPicker = poiPicker
  205. // 监听poi选中信息
  206. poiPicker.on('poiPicked', function (poiResult) {
  207. let source = poiResult.source
  208. let poi = poiResult.item
  209. if (source !== 'search') {
  210. poiPicker.searchByKeyword(poi.name)
  211. } else {
  212. poiPicker.clearSearchResults()
  213. vm.markers = []
  214. let lng = poi.location.lng
  215. let lat = poi.location.lat
  216. let address = poi.cityname + poi.adname + poi.name
  217. vm.center = [lng, lat]
  218. // console.log(vm.center)
  219. vm.markers.push([lng, lat])
  220. vm.lng = lng
  221. vm.lat = lat
  222. vm.address = address
  223. vm.searchKey = address
  224. // console.log(vm.address)
  225. vm.mapInfo.lng = lng
  226. vm.mapInfo.lat = lat
  227. vm.mapInfo.mapText = vm.address
  228. // console.log(vm.mapInfo)
  229. vm.$store.state.addersInfo = JSON.stringify(vm.mapInfo)
  230. }
  231. })
  232. })
  233. },
  234. searchByHand() {//点击搜索事件
  235. if (this.searchKey !== '') {
  236. this.searchKey = JSON.parse(this.$store.state.addersInfo).mapText;
  237. this.poiPicker.searchByKeyword(this.searchKey)
  238. }
  239. }
  240. },
  241. }
  242. </script>
  243. <style lang="scss" scoped>
  244. .container {
  245. width: 100%;
  246. height: 500px;
  247. }
  248. .search-box {
  249. position: absolute;
  250. z-index: 5;
  251. width: 100%;
  252. left: 13%;
  253. top: 10px;
  254. height: 30px;
  255. border: none !important;
  256. }
  257. .tip-box {
  258. width: 73%;
  259. max-height: 260px;
  260. position: absolute;
  261. top: 42px;
  262. overflow-y: auto;
  263. background-color: #fff;
  264. }
  265. </style>

里面都有对应的注释

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/941155
推荐阅读
相关标签
  

闽ICP备14008679号