以下代码定位不精确:onBaiduMapReady(e) { let that = this this.BMap = e.BMap; if (this.BMap) { const geolocation = new this.BMap.Geolocation(); // 接着,调用getCurrentPosition()方法来获取当前位置信息。该方法接受一个回调函数res作为参数, // 该函数会在位置信息获取成功时被调用。在回调函数中,首先通过$nextTick()方法来保证DOM已经渲染完成,然后关闭加载动画。 // 接着,将获取到的经纬度信息赋值给地图的中心点,同时从地址信息中解析出省、市、区、街道和门牌号,并将其拼接成完整的地址信息,最后将其赋值给address变量。 geolocation.getCurrentPosition(res => { that.$nextTick(() => { that.loadingInstance.close(); }); that.center.lng = res.point.lng that.center.lat = res.point.lat const { province, city, district, street, street_number } = res.address; that.address = province + city + district + street + street_number; }) } },
时间: 2023-12-31 14:07:14 浏览: 66
以下代码是在使用百度地图API获取当前位置信息,并将获取到的经纬度信息赋值给地图的中心点,同时从地址信息中解析出省、市、区、街道和门牌号,并将其拼接成完整的地址信息,最后将其赋值给address变量。
具体流程如下:
1. 在BaiduMapReady事件回调函数中,先将this保存到that中,确保在函数内部能够访问到组件实例。
2. 使用BMap.Geolocation()方法创建一个定位对象geolocation,并调用它的getCurrentPosition()方法获取当前位置信息。该方法接受一个回调函数res作为参数,该函数会在位置信息获取成功时被调用。
3. 在回调函数中,通过$nextTick()方法来保证DOM已经渲染完成,然后关闭加载动画。
4. 将获取到的经纬度信息赋值给地图的中心点。其中,res.point.lng和res.point.lat分别表示经度和纬度。
5. 从地址信息中解析出省、市、区、街道和门牌号,并将其拼接成完整的地址信息,最后将其赋值给address变量。其中,res.address包含了详细的地址信息,包括省、市、区、街道和门牌号等字段。使用解构赋值语法将这些字段提取出来,然后拼接成完整的地址信息。
相关问题
添加地图搜索 <el-dialog id="myMapDialog" title="请选择收货地址" width="500px" :visible.sync="dialogVisible" right=0> <baidu-map class="map" :center="center" :zoom="zoom" :scroll-wheel-zoom="true" @ready="onBaiduMapReady" @click="getClickInfo"> <bm-view style="width: 100%; height: 100%;" /> <bm-marker :position="{ lng: center.lng, lat: center.lat }" :dragging="true" animation="BMAP_ANIMATION_BOUNCE" /> <bm-geolocation anchor="BMAP_ANCHOR_BOTTOM_RIGHT" :showAddressBar="true" :autoLocation="true"></bm-geolocation> </baidu-map> <div slot="footer"> <el-input v-model="address" style="margin-bottom: 15px;" placeholder="请选择或填写收货地址"></el-input> <el-button type="primary" @click="getAddr">确定</el-button> <el-button @click="dialogVisible = false">取消</el-button> </div> </el-dialog>onBaiduMapReady(e) { let that = this this.BMap = e.BMap; if (this.BMap) { const geolocation = new this.BMap.Geolocation(); geolocation.getCurrentPosition(res => { console.log(res) that.$nextTick(() => { that.loadingInstance.close(); }); that.center.lng = res.point.lng that.center.lat = res.point.lat const { province, city, district, street, street_number } = res.address; that.address = province + city + district + street + street_number; }) } },
这段代码使用了百度地图的 API 实现了一个地图搜索的功能。具体来说,它创建了一个弹窗对话框,并在其中添加了一个百度地图组件。这个组件包含一个地图视图和一个标记点,可以通过鼠标点击获取位置信息。
在 onBaiduMapReady 方法中,它首先获取当前位置信息,并将地图中心点设置为当前位置。然后,它将地址的各个部分(省、市、区、街道等)拼接在一起,赋值给 this.address 变量。最后,它关闭了一个 loading 实例。
在弹窗对话框的底部,它添加了一个输入框和两个按钮。输入框用于输入或选择收货地址,确定按钮用于确认选择的地址,取消按钮用于关闭弹窗对话框。
uniapp微信小程序使用百度地图bmap-wx.js,实现地图显示、获取当前位置(包含地点名称)和围栏守护(包含动态修改大小)的功能,代码实现
在Uniapp微信小程序中使用百度地图bmapx.js实现地显示、获取当前位置(含地点名称)和围守护(包含动态修改大小)的功能,你可以按照以下步骤进行操作:
1. 安装bmap-wx.js依赖:
在项目根目录下打开终端或命令行,执行以下命令安装bmap-wx.js依赖:
```
npm install bmap-wx --save
```
2. 在`main.js`中引入bmap-wx.js:
```javascript
import BMap from 'bmap-wx';
Vue.prototype.BMap = BMap;
```
3. 在需要使用地图的页面中引入百度地图组件:
```html
<template>
<view>
<view class="map-container">
<map :longitude="longitude" :latitude="latitude" :scale="scale" :markers="markers" @markertap="markerTap"></map>
</view>
</view>
</template>
<style scoped>
.map-container {
width: 100%;
height: 100%;
}
</style>
```
4. 在`<script>`中定义地图相关的数据及方法:
```javascript
<script>
export default {
data() {
return {
longitude: 0, // 当前位置经度
latitude: 0, // 当前位置纬度
scale: 14, // 地图缩放级别
markers: [], // 地图标记点
}
},
mounted() {
this.getLocation();
},
methods: {
getLocation() {
uni.getLocation({
type: 'gcj02',
success: (res) => {
this.latitude = res.latitude;
this.longitude = res.longitude;
this.markers = [{
id: 1,
longitude: res.longitude,
latitude: res.latitude,
title: '当前位置',
iconPath: '/static/icons/location.png',
width: 20,
height: 20
}];
this.getPlaceName(res.latitude, res.longitude);
},
fail: (err) => {
console.log('获取位置失败', err);
}
});
},
getPlaceName(latitude, longitude) {
let BMap = new this.BMap.BMapWX({ ak: '你的百度地图AK' });
BMap.regeocoding({
location: `${latitude},${longitude}`,
success: (res) => {
console.log('位置信息', res);
this.markers[0].title = res.originalData.result.formatted_address;
},
fail: (err) => {
console.log('逆地址解析失败', err);
}
});
},
markerTap(e) {
console.log('点击了标记点', e);
},
}
}
</script>
```
5. 在`manifest.json`文件中添加百度地图的权限配置:
```json
{
"mp-weixin": {
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序的地图展示和定位功能"
}
}
}
}
```
6. 实现围栏守护功能:
你可以使用`polyline`组件来绘制围栏,具体操作请参考Uniapp官方文档。
以上是一个简单的示例,你可以根据自己的需求进行修改和扩展。请注意,在使用百度地图API时,需要在百度开放平台申请密钥(AK)并替换代码中的相应部分。
阅读全文