在仿照开发一个电影网站前端功能的时候,突然发现了免费使用腾讯地图可以进行定位。整体思路是利用浏览器的geolocation功能拿到用户的经纬度信息,再把这个经纬度信息提交到腾讯接口去查询,即可返回对应的物理定位。当然,这个物理地址有些就相对精确,有些就差异有点达了。
这里复盘一下使用方,一个简单的应用:
<!doctype html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>定位访客位置</title> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.7.16/vue.min.js"></script> </head> <body> <h1>定位</h1> <div id="app"> <button @click="onClick">查询位置</button> <div v-if="result"> <p v-if="result.address_component"> 你的位置是:{{result.address_component.nation}}-{{result.address_component.province}}-{{result.address_component.city}}-{{result.address_component.district}}-{{result.address_component.street}} </p> <p v-if="result.address_reference"> 街道:{{result.address_reference.town.title}}-地标:{{result.address_reference.landmark_l2.title}} </p> <p v-if="result.address_reference">路:{{result.address_reference.street.title}}</p> <p v-if="result.formatted_addresses"> formatted_addresses:{{result.formatted_addresses.recommend}}-{{result.formatted_addresses.rough}}-{{result.formatted_addresses.standard_address}} </p> </div> </div> </body> </html> <script> let app = new Vue({ el: '#app', data: { result: {}, }, methods: { onClick() { // 调用函数获取用户地址信息 fetchUserAddress() }, }, }) async function getUserGeolocation() { return new Promise((resolve, reject) => { if ('geolocation' in navigator) { navigator.geolocation.getCurrentPosition( (position) => { const { latitude, longitude } = position.coords resolve({ latitude, longitude }) }, (error) => { reject(new Error(`Error obtaining location: ${error.message}`)) }, ) } else { reject(new Error('Geolocation is not supported by this browser.')) } }) } async function getUserLocation() { try { return await getUserGeolocation() } catch (error) { console.error('获取位置失败:', error) } } function fetchUserAddress() { getUserLocation() .then(({ latitude, longitude }) => { const API_URL = `https://h5gw.map.qq.com/ws/geocoder/v1/?key=[你的key]&location=${latitude},${longitude}&apptag=lbs_geocoder&output=jsonp` $.ajax({ url: API_URL, dataType: 'jsonp', // 指定数据类型为 jsonp jsonp: 'callback', // 默认参数名是 'callback' success: function (data) { // console.log('获取地址成功:', data) const { message, result, status } = data if (message === 'Success') { app.result = result console.log('获取地址成功:', app.result) } else { console.error('获取地址失败:', message) } }, error: function (jqXHR, textStatus, errorThrown) { console.error('获取地址失败:', textStatus, errorThrown) }, }) }) .catch((error) => { console.error('获取位置或地址时出错:', error) }) } </script>
注意代码那里的[你的key],没错就是这样的,可以根据这段代码拓展更详细使用方式。