uni-app 微信小程序使用map标签创建的地图 某个特定的触发方法修改latitude,longitude后 地图不会跳转过去

uni-app 微信小程序使用map标签创建的地图 某个特定的触发方法修改latitude,longitude后 地图不会跳转过去

开发环境 版本号 项目创建方式
Windows 22H2 HBuilderX

操作步骤:

  • 重新写一个方法 用一个按钮来触发修改lnglat也没有用

预期结果:

  • 可以跳转到目标坐标点

实际结果:

  • 没有跳转到目标坐标点

bug描述:

<map ref="map" class="map" id="map" :latitude="latitude" :longitude="longitude" scale="18" show-location="true"  
    :enable-satellite="isWXMap" @tap="bindMap" :scale="zoom" @regionchange="changeRegion" :polygons="polygons"  
    :markers="markers" @markertap="clickMarker" :circles="nearbyCircle"></map>

以上是map标签的参数 通过修改参数latitude,longitude所绑定的两个值 无法将视角跳转到所对应的坐标 以下是调用其函数的标签 是使用@click方法触发的

<view v-for="(item, index) in nowHouseList" :key="index" class="list-item" [@click](/user/click)="toMyHouseLocation(item)">
</view>

以上标签触发了toMyHouseLocation方法 此方法可以正常取到nowHouseList中的值 也可以正常打印

toMyHouseLocation(option) {  
    this.bdcdyh_position = option.RealEstateNumber // 切换被选中的房屋  
    let lnglat = this.wgs84togcj02(option.lnglat[0], option.lnglat[1])  
    console.log('lnglat', lnglat) // 可以正常打印  
    // 111.9730561328634 27.69541411272474        参考坐标  
    // 跳转到目标位置  
    this.longitude = lnglat[0]   
    this.latitude = lnglat[1]  
    console.log('location', this.longitude, this.latitude) // 发现打印出来的是修改后的值  
}

补充: 使用其他方法修改lnglat值后 此方法再次修改就可以使用了 但是使用一次 之后重复触发此方法又会失效


更多关于uni-app 微信小程序使用map标签创建的地图 某个特定的触发方法修改latitude,longitude后 地图不会跳转过去的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

已解决 lnglat虽然可以设置地点 但是无法根据地图中心点自动变化 如果需要重新返回原来的值 那么修改一下值的精度就可以了加一位精度 或者减一位精度

更多关于uni-app 微信小程序使用map标签创建的地图 某个特定的触发方法修改latitude,longitude后 地图不会跳转过去的实战教程也可以访问 https://www.itying.com/category-93-b0.html


map 标签创建的地图是基于微信小程序原生的地图组件,它的属性是只读的
uni.createMapContext(mapId,this)里moveToLocation这个方法,是可以移动的

请查看刚刚我更新的补充 在最下面 同样是使用修改this.longitude和this.latitude 任然可以改变中心坐标点 当然 其他的改变坐标我也是这么写的 也可以改变

似乎找到原因了 我在onshow方法中调用了某个方法 此方法会自动改变lnglat的值 视角会跳过去 当我再次移动视角后 lnglat的值并没有改变 我仍然跳转的是该地点 所以导致无法跳转过去 现在的问题就是 为什么我移动视角后 map属性绑定的 lnglat没有发生改变

至于为什么不用uni.createMapContext(mapId,this)里moveToLocation方法移动视角 是因为需求中有地图视野发生变化后触发的事件 使用moveToLocation时无法触发这个地图移动事件 所以只使用的<map>中的 :longitude和:latitude属性设置中心点 这个方法的缺点就是不会根据你的视角移动所改变 并且如果当前的值完全等于你下一次需要跳转的位置 则其不会发生任何改变 (或许是没有触发watch的机制) 所以需要手动减少或添加一位精度触发机制 就可以做到重复访问同一个地点了。 楼上说值是只读的 我不理解为什么说是只读的 而且此方法绑定数值后可以设置中心点坐标。 记录一下踩坑吧。。。

在 UniApp 中使用 map 组件创建微信小程序地图时,如果你通过某个触发方法修改了 latitudelongitude,但地图没有跳转到新的位置,可能是因为没有正确触发地图的更新。以下是一些可能的原因和解决方法:

1. 确保 map 组件的 latitudelongitude 绑定正确

首先,确保你在 map 组件中正确绑定了 latitudelongitude

<map
  id="myMap"
  :latitude="latitude"
  :longitude="longitude"
  :markers="markers"
  style="width: 100%; height: 300px;"
></map>

2. 使用 this.$set 或直接赋值

在修改 latitudelongitude 时,确保你使用了 this.$set 或者直接赋值的方式,以确保 Vue 能够检测到数据的变化:

export default {
  data() {
    return {
      latitude: 39.908823,
      longitude: 116.397470,
      markers: []
    };
  },
  methods: {
    updateLocation(newLat, newLng) {
      this.latitude = newLat;
      this.longitude = newLng;
    }
  }
};

3. 使用 mapContext 手动更新地图位置

如果直接修改 latitudelongitude 没有生效,你可以使用微信小程序的 mapContext 来手动更新地图的位置:

export default {
  methods: {
    updateLocation(newLat, newLng) {
      this.latitude = newLat;
      this.longitude = newLng;

      // 获取 map 上下文
      const mapContext = uni.createMapContext('myMap', this);

      // 使用 moveToLocation 方法跳转到新位置
      mapContext.moveToLocation({
        latitude: newLat,
        longitude: newLng,
        success: () => {
          console.log('地图跳转成功');
        },
        fail: (err) => {
          console.log('地图跳转失败', err);
        }
      });
    }
  }
};

4. 确保 map 组件已经渲染

如果你在页面加载时就调用 updateLocation 方法,可能会因为 map 组件还没有完全渲染而导致跳转失败。你可以考虑在 onReady 生命周期钩子中调用 updateLocation 方法:

export default {
  onReady() {
    this.updateLocation(39.908823, 116.397470);
  },
  methods: {
    updateLocation(newLat, newLng) {
      this.latitude = newLat;
      this.longitude = newLng;

      const mapContext = uni.createMapContext('myMap', this);
      mapContext.moveToLocation({
        latitude: newLat,
        longitude: newLng,
        success: () => {
          console.log('地图跳转成功');
        },
        fail: (err) => {
          console.log('地图跳转失败', err);
        }
      });
    }
  }
};

5. 检查微信小程序的基础库版本

确保你使用的微信小程序基础库版本支持 moveToLocation 方法。如果你的基础库版本过低,可能会导致某些 API 不可用。

6. 调试和日志

updateLocation 方法中添加一些调试日志,检查 newLatnewLng 的值是否正确,以及 moveToLocation 是否被调用。

updateLocation(newLat, newLng) {
  console.log('New Latitude:', newLat);
  console.log('New Longitude:', newLng);

  this.latitude = newLat;
  this.longitude = newLng;

  const mapContext = uni.createMapContext('myMap', this);
  mapContext.moveToLocation({
    latitude: newLat,
    longitude: newLng,
    success: () => {
      console.log('地图跳转成功');
    },
    fail: (err) => {
      console.log('地图跳转失败', err);
    }
  });
}
回到顶部