微信小程序使用 map 组件实现拖动地图并获取当前地图中心的经纬度

微信小程序中,使用 map 组件可以轻松实现拖动地图并获取当前地图中心的经纬度。以下是实现步骤和代码示例:

实现思路

  1. 配置地图组件
    • 在小程序页面中添加 map 组件。
    • 设置地图的相关属性(如 enable-region-change 监听地图区域变化)。
  2. 监听地图拖动事件
    • 使用 bindregionchange 事件监听地图区域变化。
  3. 获取地图中心点的经纬度
    • 调用 MapContextgetCenterLocation 方法获取地图中心的经纬度。

代码实现

1. 页面 WXML

添加 map 组件并设置属性。

<view class="container">
  <map
    id="map"
    longitude="{{longitude}}"
    latitude="{{latitude}}"
    scale="14"
    enable-flex
    show-location
    bindregionchange="onRegionChange"
    style="width: 100%; height: 400px;"
  >
    <!-- 中心点标记 -->
    <image
      class="center-marker"
      src="/assets/marker.png"
      mode="widthFix"
    />
  </map>
  <view class="info">
    <text>经度: {{currentLongitude}}</text>
    <text>纬度: {{currentLatitude}}</text>
  </view>
</view>

2. 页面 WXSS

定义地图样式和中心点标记样式。

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.center-marker {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 30px;
  height: 30px;
  transform: translate(-50%, -50%);
}

.info {
  margin-top: 20px;
}

3. 页面 JS

初始化地图中心点的经纬度,并监听地图拖动。

Page({
  data: {
    latitude: 23.099994, // 初始纬度
    longitude: 113.324520, // 初始经度
    currentLatitude: 23.099994,
    currentLongitude: 113.324520,
  },

  onLoad() {
    // 获取用户当前位置信息
    wx.getLocation({
      type: 'gcj02',
      success: (res) => {
        this.setData({
          latitude: res.latitude,
          longitude: res.longitude,
          currentLatitude: res.latitude,
          currentLongitude: res.longitude,
        });
      },
      fail: (err) => {
        console.error('获取位置失败', err);
      },
    });
  },

  onRegionChange(e) {
    if (e.type === 'end') {
      // 拖动或缩放结束时获取中心点经纬度
      const mapCtx = wx.createMapContext('map');
      mapCtx.getCenterLocation({
        success: (res) => {
          this.setData({
            currentLatitude: res.latitude,
            currentLongitude: res.longitude,
          });
        },
        fail: (err) => {
          console.error('获取中心位置失败', err);
        },
      });
    }
  },
});

4. 中心点图标

将一个中心标记图标放置在地图中间。可以在小程序项目中放置一个 marker.png 文件,并通过 WXML 中的 image 标签实现。

功能说明

  1. 初始定位:在 onLoad 中使用 wx.getLocation 设置初始地图的经纬度。
  2. 拖动事件
    • bindregionchange 事件的回调参数中可以通过 e.type 判断是拖动或缩放。
    • 使用 getCenterLocation 方法获取当前中心点的经纬度。
  3. 动态显示中心点:通过拖动地图更新显示中心点经纬度。

效果图

  1. 打开小程序,地图初始化到用户当前的位置。
  2. 拖动地图时,中心点的经纬度会实时更新到页面上显示。

常见问题

  1. 地图组件层级问题
    • 如果地图被其他组件遮挡,可通过 z-index 调整层级。
  2. 中心点标记无法点击
    • 使用图片作为标记,而不是通过 markers 属性添加的标记。
  3. 用户未授权定位权限
    • 提示用户打开位置权限,并处理授权失败的场景。

通过以上方法,您可以实现微信小程序中地图拖动并动态获取经纬度的功能。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/4539

Like (0)
Previous 2024年11月25日 下午7:30
Next 2024年11月25日 下午7:43

相关推荐

  • 把一个矩形div变成一个直角三角形

    要将一个矩形 div 变成一个直角三角形,可以通过 CSS 的一些属性进行实现。具体的方法是利用 border 属性来隐藏矩形的部分,留下一个直角三角形的形状。以下是实现的步骤:CSS 方法: 解释:width 和 height 设置为 0:通过将 div 的宽度和高度设置为 0,实际上把矩形的主体部分隐藏了。border-left 和 border-bot…

    2024年11月27日
    00
  • 在 Vue3 和 uniapp 的 H5 环境中使用 QRCode.toDataURL() 生成二维码时无法显示的问题

    1. 图片格式或生成的 DataURL 处理问题QRCode.toDataURL() 方法通常会生成一个 Base64 编码的 PNG 图片。某些 Android 浏览器或 WebView 可能对 Base64 编码的图片支持不好,或者由于资源限制无法正常解析。解决方法:尝试通过生成二维码的图片 URL 直接展示而非使用 Base64 编码。可以通过将二维码…

    2024年11月27日
    00
  • Redis中如何使用lua脚本redis与lua的相互调用方法

    在 Redis 中,Lua 脚本 提供了一种强大的方式来执行原子操作,可以在 Redis 服务器上直接执行 Lua 代码,从而避免了多次网络往返和保证操作的原子性。Redis 内置了对 Lua 脚本的支持,通过 EVAL 命令来执行脚本,EVALSHA 则用于执行已经加载到 Redis 服务器的脚本。1. Redis 与 Lua 脚本的基本交互1.1 基本的…

    2024年11月28日
    00
  • 在 Mac 上,Google Chrome 无法打开网页的问题

    在 Mac 上,Google Chrome 无法打开网页可能由多个因素引起。以下是一些常见的原因及解决方法: 1. 检查网络连接 确保你的 Mac 已连接到互联网,尝试使用其他设备(如手机或其他电脑)打开相同的网页,确认问题是否出在设备本身或网络。 2. 清除浏览器缓存和历史记录 长期积累的缓存和浏览数据可能导致加载问题。尝试清除缓存和历史记录: 3. 禁用…

    2024年11月23日
    00
  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • 在 Nuxt.js 应用中,webpack 的 compile 事件钩子构建过程

    在 Nuxt.js 应用中,webpack 的 compile 事件钩子通常用于在构建过程中处理或监听 Webpack 编译的状态。webpack 是 Nuxt.js 中的核心构建工具之一,而 Nuxt.js 本身是基于 Webpack 配置的,允许你通过扩展 Webpack 配置来进行自定义。要使用 webpack 的 compile 事件钩子,首先你需要…

    2024年11月29日
    00
  • wordpress 蜘蛛记录插件的功能记录网站的所有访问记录

    要在 WordPress 网站上实现类似的功能,通常你需要开发一个 WordPress 插件。以下是一步步创建一个插件的指南,它可以记录访问者的访问记录,区分搜索引擎蜘蛛,并保存访客的 IP 地址。 1. 创建插件目录和文件 2. 插件文件结构 插件的文件结构大概如下: 3. 编写插件代码 在 visitor-tracker.php 文件中,添加以下代码: …

    2024年11月22日
    00
  • 2024年最新的 Node.js 安装与环境配置教程

    以下是2024年最新的 Node.js 安装与环境配置教程,适用于 Windows、macOS 和 Linux 系统。 一、什么是 Node.js? Node.js 是一个基于 V8 引擎的 JavaScript 运行环境,主要用于开发服务端应用程序。它的特点是异步事件驱动和非阻塞 I/O,适合高性能应用。 二、Node.js 安装 1. 下载 Node.j…

    2024年11月23日
    00
  • 安装 Laravel 11 + Filament 详细教程

    安装Laravel 11之前选确保安装了Composer 管理器,接下来的步骤是通过Composer 包管理器安装完成的。 一、前提条件 二、使用 Composer 创建新的 Laravel 11 项目 三、在现有项目中添加 Laravel 11(如果是集成到现有项目) 请注意,在实际安装过程中,可能会遇到各种问题,如权限问题(在 Linux 下,如果没有足…

    2025年1月18日
    00
  • uni-app 中的一个 API,uni.getLocation用于获取用户的地理位置信息

    uni.getLocation 是 uni-app 中的一个 API,用于获取用户的地理位置信息。它可以通过 GPS 或网络方式获取当前位置,并提供包括经纬度、速度、精度等信息。这个 API 在移动端(如安卓、iOS)和 H5 平台上均可使用。基本语法 参数说明type(可选):指定位置的坐标类型。支持 ‘wgs84’ 和 ‘gcj02’,默认值为 ‘wgs…

    2024年11月28日
    00
  • 微信小程序RequestTask.onChunkReceived 监听分块数据接收事件接口

    在微信小程序中,RequestTask.onChunkReceived 是用于监听分块数据接收事件的接口。此功能适用于需要逐步接收大数据(例如流媒体、文件分块等)的场景,可以显著提升大文件传输的性能和用户体验。 以下是详细介绍和使用方法: 1. 功能说明用途:监听通过 wx.request 或 wx.downloadFile 发起的请求过程中,每次接收到的数…

    2024年11月28日
    00
  • 安卓用微信作为第三方登录,登录授权界面调用

    在 Android 应用中实现微信第三方登录,可以通过调用微信提供的开放平台 SDK 来完成。以下是实现微信登录授权界面的完整步骤: 1. 准备工作 注册微信开放平台应用 下载微信 SDK 2. 项目配置 引入微信 SDK 将 SDK 文件添加到项目的 libs 和 jniLibs 目录下: 在 build.gradle 中添加依赖: 配置权限 在 Andr…

    2024年12月3日
    00
  • pywebview 页面请求数据总是报错:TypeError: Cannot read properties of undefined (reading ‘api’)

    pywebview 中的 TypeError: Cannot read properties of undefined (reading ‘api’) 错误通常意味着 JavaScript 代码试图访问一个未定义的对象或属性(如 api)。这种问题通常出现在 Python 与前端 JavaScript 交互时,可能是由于以下原因:可能的原因及解决方法:Jav…

    2024年11月27日
    00
  • 在 Android 中 Matrix 实现图像的缩放和裁剪将 Glide 图像从 fitCenter 转换为 centerCrop

    在 Android 中,Matrix 可以用来实现图像的缩放和裁剪逻辑。要将 Glide 图像从 fitCenter 转换为 centerCrop,需要通过 Matrix 计算变换逻辑。以下是使用 Kotlin 实现的方法:实现步骤计算目标变换矩阵:根据目标宽高比,判断是否需要横向或纵向裁剪。设置 Matrix:使用 Matrix 执行缩放和平移操作。应用到…

    2024年12月3日
    00
  • Python安装与环境配置的详细讲解

    在本文中,我们将详细介绍 Python 的安装及环境配置过程。无论你是 Windows、macOS 还是 Linux 用户,都能根据本教程成功安装 Python 并配置开发环境。 1. 安装 Python(Windows、macOS、Linux) (1) Windows 安装 Python 或 安装 pip: 安装和配置虚拟环境(可选): 激活虚拟环境: (…

    2024年11月23日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信