uni-app 地图缩放中心点问题

发布于 1周前 作者 eggper 来自 Uni-App

uni-app 地图缩放中心点问题

开发环境 版本号 项目创建方式
Mac 14.2.1 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.29

手机系统:Android

手机系统版本号:Android 11

手机厂商:华为

手机机型:非特定机型

页面类型:nvue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:

```html
<map id="map"  
     min-scale="3"  
     max-scale="20"  
     :longitude="lon"  
     :latitude="lat"  
     :scale="scale"  
     :markers="markers"  
     :show-scale="false"  
     :enable-traffic="traffic"  
      @regionchange="doRegionchangeAli"></map>

操作步骤:

预期结果:

实际结果:

bug描述:

iOS地图缩放中心点是**地图中心**,Android地图缩放中心点是**双指缩放中心**,请问能否统一或提供设置方法?

搜索发现之前有人遇到过但是没找到解决方案
https://ask.dcloud.net.cn/question/111202
https://ask.dcloud.net.cn/question/168056

1 回复

在处理 uni-app 中地图组件的缩放中心点问题时,通常我们需要确保在缩放地图时,中心点(通常是用户点击或指定的位置)保持不变。这可以通过监听地图的缩放事件,并动态调整地图的中心点坐标来实现。以下是一个简单的代码示例,展示了如何在 uni-app 中实现这一功能。

首先,确保你的项目中已经引入了地图组件。然后,你可以按照以下步骤进行设置:

  1. 在页面的 <template> 部分添加地图组件
<template>
  <view class="container">
    <map
      id="myMap"
      :longitude="longitude"
      :latitude="latitude"
      :scale="scale"
      :markers="markers"
      @tap="onMapTap"
      @regionchange="onRegionChange"
      style="width: 100%; height: 100%;"
    ></map>
  </view>
</template>
  1. 在页面的 <script> 部分定义数据和方法
<script>
export default {
  data() {
    return {
      longitude: 116.397428, // 初始经度
      latitude: 39.90923,    // 初始纬度
      scale: 14,             // 初始缩放级别
      tapLongitude: null,    // 点击位置的经度
      tapLatitude: null,     // 点击位置的纬度
      markers: [
        {
          id: 1,
          latitude: 39.90923,
          longitude: 116.397428,
          title: '示例位置'
        }
      ]
    };
  },
  methods: {
    onMapTap(e) {
      this.tapLongitude = e.detail.longitude;
      this.tapLatitude = e.detail.latitude;
      this.centerAndZoom(this.tapLongitude, this.tapLatitude, this.scale + 1);
    },
    onRegionChange(e) {
      // 如果需要,可以在此处理区域变化事件
    },
    centerAndZoom(longitude, latitude, scale) {
      this.longitude = longitude;
      this.latitude = latitude;
      this.scale = scale;
      // 这里可以添加逻辑来平滑过渡缩放和中心点变化
      // 例如使用 setTimeout 或 requestAnimationFrame 来模拟动画效果
    }
  }
};
</script>
  1. 在页面的 <style> 部分添加样式(可选):
<style>
.container {
  height: 100vh;
}
</style>

在上述代码中,当用户点击地图时,onMapTap 方法会被触发,该方法记录点击位置的经纬度,并调用 centerAndZoom 方法以该点为中心进行缩放。注意,这里的缩放是通过直接设置 scale 属性来实现的,你可能需要根据实际需求调整缩放逻辑,比如添加动画效果等。

此外,onRegionChange 方法用于监听地图区域变化事件,你可以根据需要在此方法中添加额外的逻辑处理。

回到顶部