微信小程序使用 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

相关推荐

  • Android Studio 2024 版本安装 SDK、Gradle环境配置

    在 Android Studio 2024 中,配置 SDK 和 Gradle 环境是非常重要的步骤,确保开发环境能正确运行、编译和构建你的 Android 项目。以下是详细的安装和配置步骤。 1. 安装 Android Studio 2024 首先,你需要安装 Android Studio 2024。你可以从 Android Studio 官网 下载最新版…

    2024年11月23日
    00
  • 微信支付域名回调用个人服务器域名的方法

    在使用微信支付功能时,微信支付的回调需要指定合法的 支付回调通知地址(即回调域名)。如果你想使用个人服务器的域名来作为微信支付的回调域名,需要满足以下条件并完成配置: 1. 域名要求 合法域名的要求 2. 配置个人服务器域名 步骤 1:准备域名 步骤 2:设置 HTTPS 步骤 3:配置域名解析 3. 微信支付后台配置 3. 保存配置。 4. 在代码中处理回…

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

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

    2024年11月29日
    00
  • Android 解决 “Module was compiled with an incompatible version of Kotlin“

    “Module was compiled with an incompatible version of Kotlin” 错误通常出现在 Android 开发中,因为模块的 Kotlin 编译器版本与项目中的 Kotlin 编译器版本不匹配。以下是解决此问题的方法: 1. 检查 Kotlin 插件版本步骤:打开 Android Studio。点击顶部菜单的 …

    2024年11月26日
    00
  • 将 Unity 项目打包发布到微信小程序平台的方法

    将 Unity 项目打包发布到微信小程序平台需要用到 Unity 的 WeChat Mini Game SDK 和微信开发者工具。以下是详细的操作步骤: 1. 准备工作 1.1 安装工具 1.2 注册微信小程序账号 2. 项目设置 2.1 导入 SDK 2.2 配置 WebGL 设置 在 Unity 中完成 WebGL 平台配置: 2.3 添加 WeChat…

    2024年11月24日
    00
  • 博客网站的链接添加nofollow的好处

    在博客中为链接添加 nofollow 属性可以在以下几个方面带来好处: 1. 防止权重流失作用:为外部链接添加 nofollow 标签可以阻止搜索引擎将页面权重(PageRank)传递给目标页面,从而保留网站自身的 SEO 权重。适用场景:指向不可靠或低质量内容的链接。赞助商链接或付费推广链接。 2. 避免搜索引擎惩罚作用:搜索引擎(如 Google)要求对…

    2024年11月28日
    00
  • Solving the Makefile Missing Separator Stop Error in VSCode ……

    在 VSCode 中处理 Makefile 的 missing separator. Stop 错误,通常是因为 Makefile 中的命令行前没有用Tab 键缩进,而使用了空格。Makefile 规定,配方(recipe)中的每个命令行必须以Tab 键开头,而不是空格。 解决方法1. 检查 Makefile 的缩进打开报错的 Makefile 文件。找到出…

    2024年12月2日
    00
  • 搭建一个基于 Node.js 和 MySQL 的微信小程序

    搭建一个基于 Node.js 和 MySQL 的微信小程序后台可以帮助你管理数据、处理请求、存储用户信息等。下面是如何从头开始搭建一个基本的微信小程序后台系统的详细步骤。 1. 环境准备 确保你已经安装以下开发工具: 2. 创建 Node.js 项目 首先,创建一个新的 Node.js 项目: 2. 安装必要的依赖包: 使用以下命令安装这些依赖: 配置 My…

    2024年11月24日
    00
  • 使用 Webpack 5 优化构建减少生成文件的体积提升前端性能

    在使用 Webpack 5 时,优化构建以减少生成文件的体积是提升前端性能的重要一步。以下是一些常见的优化方法和策略: 1. 开启生产模式 确保构建时使用生产模式,Webpack 会自动应用多种优化(如代码压缩、Tree Shaking 等): 或在配置文件中明确设置: 2. 启用 Tree Shaking Tree Shaking 是 Webpack 内置…

    2024年12月3日
    00
  • Android Studio 国内镜像,加速下载和构建过程

    在国内使用 Android Studio 时,由于访问 Google 的官方资源(如 Gradle 和 SDK)速度较慢甚至无法访问,可以通过配置国内镜像源来加速下载和构建过程。以下是详细配置步骤: 1. 配置 Gradle 国内镜像 Gradle 是 Android Studio 构建项目的重要工具,其依赖库通常托管在 Google Maven 和 JCe…

    2024年11月25日
    00
  • 小程序支持哪种类型的二维码 / 小程序识别GS1码

    二维码(Quick Response Code,快速响应码)是一种能够存储和传递信息的二维条形码,由黑白矩阵构成,能够在短时间内快速扫描并获取编码信息。二维码广泛应用于支付、商品追溯、信息传递等多个领域。下面是关于二维码的几个方面的详细解析,包括如何理解二维码、如何生成二维码、小程序支持的二维码类型、以及小程序如何识别 GS1 码。 1. 理解二维码 二维码…

    2024年11月23日
    00
  • 微信小程序错误提示 does not have a method “onShareTimeline”

    当在微信小程序中尝试实现分享到朋友圈功能时,如果你在控制台遇到 does not have a method “onShareTimeline” 错误,这通常是由于以下原因之一: 1. 检查基础库版本 onShareTimeline 是在小程序基础库 2.11.3 及以上版本支持的。如果当前开发者工具的基础库版本较低,会导致方法无法找到。 解决方法: 2. …

    2024年11月26日
    00
  • 部署 Harbor 时,如果运行 install 脚本报错可能导致问题的

    在部署 Harbor 时,如果运行 install 脚本报错,可能是网络问题导致的。以下是排查网络问题的方法: 1. 检查网络连通性 测试目标网络的连通性: 检查 DNS 配置: 如果解析失败,检查 /etc/resolv.conf 中的 DNS 配置,或者尝试手动指定公共 DNS,如 Google 的 8.8.8.8 或阿里云的 223.5.5.5。 2.…

    2024年12月9日
    00
  • Python 的 json模块序列化数据从文件里读取出来或存入文件

    Python 的 json 模块用于处理 JSON 格式的数据,可以将 JSON 数据与 Python 数据结构之间相互转换。以下是具体用法,包括从文件读取 JSON 数据以及将数据写入文件: 1. 将 JSON 数据从文件中读取到 Python 数据结构 代码示例: 解析过程: 2. 将 Python 数据结构写入到文件中(序列化为 JSON) 代码示例:…

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

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

    2024年11月22日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信