我是靠谱客的博主 矮小摩托,这篇文章主要介绍vue中实现高德定位功能,现在分享给大家,希望可以做个参考。

一、获取key及在index.htm中引入

首先需要成为高德开发者,申请到适合项目的key.并在index.html中进行引入

复制代码
1
<script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.3&key=d79ff396531b948ce14d5be1c733fc36"></script>

二、在配置文件中进行相应配置

根据vue脚手架的不用需要在不同的文件中进行配置。

我项目使用的是cli3的脚手架,需要在Vue.config.js中进行高德地图配置

复制代码
1
2
3
externals: { 'AMap': 'AMap' // 高德地图配置 }

三、在需要用到的地方进行地图初始化及定位操作

因项目需求只需要在注册页面进行默认定位,故只引用一次就行。并没有单独的抽离出来,可以根据项目的需求进行抽离。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import AMap from "AMap"; // 引入高德地图 data() { // debugger return { locationData: { // 用于定位相关信息提交 lat: "", // 纬度 lon: "", // 经度 province: "", // 省 city: "", // 市 district: "", // 区 县 nowPlace: "", // 省-市-区 Address: "" // 详细地址 } }; }, methods:{ getLocation() { const self = this; AMap.plugin("AMap.Geolocation", function() { var geolocation = new AMap.Geolocation({ enableHighAccuracy: true, // 是否使用高精度定位,默认:true timeout: 10000, // 超过10秒后停止定位,默认:无穷大 maximumAge: 0, // 定位结果缓存0毫秒,默认:0 convert: true // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true }); geolocation.getCurrentPosition(); AMap.event.addListener(geolocation, "complete", onComplete); AMap.event.addListener(geolocation, "error", onError); function onComplete(data) { // data是具体的定位信息 // debugger console.log("定位成功信息:", data); self.newGetAddress(data.position.lat, data.position.lng); } function onError(data) { // debugger // 定位出错 console.log("定位失败错误:", data); self.getLngLatLocation(); } }); }, getLngLatLocation() { const self = this; AMap.plugin("AMap.CitySearch", function() { var citySearch = new AMap.CitySearch(); citySearch.getLocalCity(function(status, result) { if (status === "complete" && result.info === "OK") { // 查询成功,result即为当前所在城市信息 console.log("通过ip获取当前城市:", result); //逆向地理编码 AMap.plugin("AMap.Geocoder", function() { var geocoder = new AMap.Geocoder({ // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode city: result.adcode }); var lnglat = result.rectangle.split(";")[0].split(","); geocoder.getAddress(lnglat, function(status, data) { if (status === "complete" && data.info === "OK") { // result为对应的地理位置详细信息 console.log(data); self.userInfo.ProvinceName = data.regeocode.addressComponent.province.toString(); self.userInfo.CCityName = data.regeocode.addressComponent.city; self.userInfo.RegionName = data.regeocode.addressComponent.district; } }); }); } }); }); }, newGetAddress: function(latitude, longitude) { const _thisSelf = this; _thisSelf.locationData.lat = latitude; _thisSelf.locationData.lon = longitude; const mapObj = new AMap.Map("mapAmap1"); mapObj.plugin("AMap.Geocoder", function() { const geocoder = new AMap.Geocoder({ city: "全国", // city 指定进行编码查询的城市,支持传入城市名、adcode 和 citycode radius: 100 // 以已知坐标为中心点,radius为半径,返回范围内兴趣点和道路信息 }); const lnglat = [longitude, latitude]; // 倒序反写经纬度 // 天津120 北京110 上海310 重庆500 , const reg1 = /^[1][1][0][0-9][0-9][0-9]/; const reg2 = /^[1][2][0][0-9][0-9][0-9]/; const reg3 = /^[5][0][0][0-9][0-9][0-9]/; const reg4 = /^[3][1][0][0-9][0-9][0-9]/; geocoder.getAddress(lnglat, function(status, result) { console.log("getAddress", result); if (status === "complete" && result.info === "OK") { // result为对应的地理位置详细信息 const adcode = result.regeocode.addressComponent.adcode; // 省市编码 if ( reg1.test(adcode) || reg2.test(adcode) || reg3.test(adcode) || reg4.test(adcode) ) { _thisSelf.locationData.city = result.regeocode.addressComponent.province; } else { _thisSelf.locationData.city = result.regeocode.addressComponent.city; } // 提取 省 市 区 详细地址信息 重拼装省-市-区信息 _thisSelf.locationData.province = result.regeocode.addressComponent.province; _thisSelf.locationData.district = result.regeocode.addressComponent.district; _thisSelf.locationData.Address = result.regeocode.formattedAddress; _thisSelf.locationData.nowPlace = result.regeocode.addressComponent.province + result.regeocode.addressComponent.city + result.regeocode.addressComponent.district; _thisSelf.userInfo.ProvinceName = _thisSelf.locationData.province; _thisSelf.userInfo.CCityName = _thisSelf.locationData.city; _thisSelf.userInfo.RegionName = _thisSelf.locationData.district; } else { console.log(_thisSelf.locationData); // 回调函数 } }); }); } }, created() { this.getLocation(); }

至此整个定位的实现全部结束,可以准确的获取到当前所在的省市区。

总结

以上所述是小编给大家介绍的vue中实现高德定位功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对靠谱客网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

最后

以上就是矮小摩托最近收集整理的关于vue中实现高德定位功能的全部内容,更多相关vue中实现高德定位功能内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(169)

评论列表共有 0 条评论

立即
投稿
返回
顶部