uni-app mapContext.addMarkers不生效
uni-app mapContext.addMarkers不生效
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Windows 10 家庭中文版 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.3.13
手机系统:Android
手机系统版本号:Android 8.0
手机厂商:小米
手机机型:MIX2
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
### 示例代码:
```html
<template>
<view>
<map id="map1" ref="map1" class="map" v-if="isShowMap" :latitude="latitude" :longitude="longitude" :scale="scale"
[@controltap](/user/controltap)="controltap" :show-location="true"></map>
<button [@click](/user/click)="addMarkers">updateMarker</button>
</view>
</template>
<script>
export default {
data() {
return {
isShowMap: true,
latitude: 23.099994,
longitude: 113.324520,
scale: 7,
controls: [{
id: 1,
position: {
left: 15,
top: 15
},
iconPath: `../../static/images/map/dlsj-icon.png`,
clickable: true
}]
}
},
onReady() {
this.mapContext = uni.createMapContext('map1', this);
this.mapContext.initMarkerCluster({
enableDefaultStyle: false,
zoomOnClick: true,
gridSize: 60,
complete(res) {
console.log('initMarkerCluster', res)
}
});
this.mapContext.on("markerClusterCreate", (e) => {
console.log("markerClusterCreate", e);
});
},
methods: {
addMarkers() {
const marker = [{
id: 1,
iconPath: `../../static/images/map/dlsj-icon.png`,
latitude: 23.099994,
longitude: 113.324520,
width: 50,
height: 50,
joinCluster: true, // 指定了该参数才会参与聚合
label: {
width: 50,
height: 30,
borderWidth: 1,
borderRadius: 10,
bgColor: '#ffffff'
}
}];
this.mapContext.addMarkers({
markers: marker,
clear: false,
complete(res) {
console.log('addMarkers', res)
}
})
},
}
}
</script>
.map {
width: 750rpx;
height: 400px;
}
操作步骤:
点击updateMarker执行mapContext.addMarkers
预期结果:
可以正常执行mapContext.addMarkers
实际结果:
点击updateMarker执行mapContext.addMarkers不生效
bug描述:
mapContext.addMarkers不生效
更多关于uni-app mapContext.addMarkers不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于uni-app mapContext.addMarkers不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
App-nvue 3.1.0+,微信小程序支持,详见文档说明
在 uni-app
中使用 mapContext.addMarkers
时,如果发现不生效,可能是由于以下原因之一。你可以根据这些可能的原因进行排查和修复:
1. mapContext
未正确获取
确保你已经通过 uni.createMapContext
正确获取了 mapContext
,并且 mapId
与地图组件的 id
一致。
const mapContext = uni.createMapContext('myMap'); // 'myMap' 是地图组件的 id
2. markers
数据格式不正确
addMarkers
方法需要传入一个 markers
数组,数组中的每个对象必须符合 marker
的格式要求。请检查 markers
的字段是否正确。
const markers = [
{
id: 1,
latitude: 39.90469, // 纬度
longitude: 116.40717, // 经度
title: '北京',
iconPath: '/static/marker.png', // 图标路径
width: 30,
height: 30,
callout: {
content: '北京市',
color: '#ffffff',
bgColor: '#007AFF',
padding: 10,
borderRadius: 4,
display: 'ALWAYS'
}
}
];
mapContext.addMarkers({
markers: markers,
clear: false // 是否先清空地图上的标记
});
3. 地图组件未渲染完成
如果在地图组件还未渲染完成时调用 addMarkers
,可能会导致方法不生效。可以尝试在 onReady
事件中调用 addMarkers
。
<map id="myMap" style="width: 100%; height: 300px;" :latitude="latitude" :longitude="longitude" @ready="onMapReady"></map>
methods: {
onMapReady() {
const mapContext = uni.createMapContext('myMap');
const markers = [
{
id: 1,
latitude: 39.90469,
longitude: 116.40717,
title: '北京',
iconPath: '/static/marker.png'
}
];
mapContext.addMarkers({
markers: markers,
clear: false
});
}
}
4. 地图组件的 latitude
和 longitude
未设置
确保地图组件的 latitude
和 longitude
属性已正确设置,否则地图可能无法正确显示标记。
<map id="myMap" style="width: 100%; height: 300px;" :latitude="latitude" :longitude="longitude"></map>
data() {
return {
latitude: 39.90469,
longitude: 116.40717
};
}
5. 平台兼容性问题
addMarkers
方法在不同平台(如微信小程序、H5、App)上的支持情况可能不同。请确保你使用的平台支持该方法。
- 微信小程序:支持。
- H5:部分功能可能不支持。
- App:支持,但需要注意平台差异。
6. 地图组件版本问题
某些情况下,地图组件的版本可能影响 addMarkers
的生效。可以尝试更新 uni-app
版本或相关依赖。
7. 调试工具问题
如果你在开发工具中测试时发现不生效,可以尝试在真机上运行,因为开发工具可能存在模拟器兼容性问题。
示例代码
以下是一个完整的示例代码,供参考:
<template>
<view>
<map id="myMap" style="width: 100%; height: 300px;" :latitude="latitude" :longitude="longitude" @ready="onMapReady"></map>
</view>
</template>
<script>
export default {
data() {
return {
latitude: 39.90469,
longitude: 116.40717
};
},
methods: {
onMapReady() {
const mapContext = uni.createMapContext('myMap');
const markers = [
{
id: 1,
latitude: 39.90469,
longitude: 116.40717,
title: '北京',
iconPath: '/static/marker.png',
width: 30,
height: 30,
callout: {
content: '北京市',
color: '#ffffff',
bgColor: '#007AFF',
padding: 10,
borderRadius: 4,
display: 'ALWAYS'
}
}
];
mapContext.addMarkers({
markers: markers,
clear: false
});
}
}
};
</script>