uniapp微信小程序地图功能实现教程

这篇具有很好参考价值的文章主要介绍了uniapp微信小程序地图功能实现教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在移动应用开发中,地图功能是非常常见且实用的功能之一。在微信小程序中也可以通过uniapp框架实现地图功能,本文将介绍如何在uniapp中实现微信小程序的地图功能。

1. 获取appid

首先需要在微信开发者工具内获取自己的小程序appid。打开微信开发者工具,在测试号界面点击导入并选择一个空文件夹,然后点击测试号即可查看自己的appid。

另外,还可以在微信公众开发平台内获取小程序appid。

2. 获取地图授权的key

腾讯地图提供了地图服务,为了使用地图功能,我们需要获取地图授权的key。具体步骤如下:

  1. 在腾讯地图官网创建一个应用。

  2. 添加一个key。

  3. 在样式应用内给刚刚创建的key设置绑定样式。

3. 功能实现

在uniapp的页面中,我们可以通过以下代码实现地图功能:

<template>
    <view>
        <map id="map" class="map_style" :latitude="latitude" :longitude="longitude" :show-location="true" :scale="scale"
            layer-style="1" :markers="markers" @tap="handleGetLongitudeLatitude" @markertap="handleClickMarker">
            <!-- 定位、缩进按钮  -->
            <cover-view class="cover-view">

                <cover-view class="cover-view-image cover-view-image-position" @click="handleCurrenPosition">
                    <cover-image class="cover-image cover-image-position" src="@/static/position.png"></cover-image>
                    <cover-view style="font-size: 10px;">
                        定位
                    </cover-view>
                </cover-view>

                <cover-view class="cover-view-image-scale">
                    <cover-view class="cover-view-image" @click="handleClickEnlarge">
                        <cover-image class="cover-image cover-image-enlarge" src="@/static/enlarge.png"></cover-image>
                    </cover-view>

                    <cover-view class="cover-view-image " @click="handleClickShrink">
                        <cover-image class="cover-image cover-image-shrink" src="@/static/shrink.png"></cover-image>
                    </cover-view>

                </cover-view>
            </cover-view>
        </map>
    </view>
</template>

<script>
    import QQMap from '@/lib/qqmap-wx-jssdk.min.js';
    const key = "WY7BZ-RRY3J-LP5FX-XGWY3-RC2TF-HOFQZ";
    
    // 标注设置
    const marksSetting = {
        alpha: 0.8, //标注的透明度
        width: 25, //标注的宽度
        height: 36, //标注的高度

        calloutSetting: {
            color: "#FFFFFF", // 文本颜色 
            fontSize: 14, // 文本字体大小
            borderRadius: 10, // 边框圆角
            borderColor: "#aaff00", //气泡边框颜色
            borderWidth:2, //边框宽度
            bgColor: "#ffc45e", //气泡背景颜色
            padding: 5, //文本边距
            display: "ALWAYS", //'BYCLICK':点击显示(我是没试出效果); 'ALWAYS':常显
            textAlign: "center", //文本对齐方式  有效值:left、center、right
            anchorX: 0, //横向偏移动位置,标准:0-1,0表示左边缘,1表示右边缘。
            anchorY: 1 //竖向偏移,标准:0-1,0表示顶边缘,1表示底边缘。
        }
    };
    export default {
    data() {
        return {
            latitude: 0, //地图纬度
            longitude: 0, //地图经度
            scale: 16, //地图缩放级别
            markers: [], //标记点集合
        }
    },
    mounted() {
        this.initMap();
    },
    methods: {
        initMap() {
            // 实例化qqmap
            this.qqmapsdk = new QQMap({
                key: key
            });
            // 获取当前位置坐标
            uni.getLocation({
                type: 'gcj02', //返回可以用于uni.openLocation的经纬度
                success: res => {
                    this.latitude = res.latitude;
                    this.longitude = res.longitude;
                    this.getMarkers(res.latitude, res.longitude);
                }
            });
        },
        getMarkers(latitude, longitude) {
            // 调用接口获取附近的标记点
            this.qqmapsdk.search({
                keyword: '餐厅',
                location: `${latitude},${longitude}`,
                success: result => {
                    const markers = result.data.map(item => ({
                        ...item,
                        iconPath: '/static/marker.png', //标注图片路径
                        width: marksSetting.width,
                        height: marksSetting.height,
                        alpha: marksSetting.alpha,
                        callout: {
                            content: item.title,
                            color: marksSetting.calloutSetting.color,
                            fontSize: marksSetting.calloutSetting.fontSize,
                            borderRadius: marksSetting.calloutSetting.borderRadius,
                            borderColor: marksSetting.calloutSetting.borderColor,
                            borderWidth: marksSetting.calloutSetting.borderWidth,
                            bgColor: marksSetting.calloutSetting.bgColor,
                            padding: marksSetting.calloutSetting.padding,
                            display: marksSetting.calloutSetting.display,
                            textAlign: marksSetting.calloutSetting.textAlign,
                            anchorX: marksSetting.calloutSetting.anchorX,
                            anchorY: marksSetting.calloutSetting.anchorY
                        }
                    }))
                    this.markers = markers;
                }
            });
        },
        handleGetLongitudeLatitude(e) {
            console.log("点击地图获取经纬度", e);
        },
        handleClickMarker(e) {
            console.log("点击标记点", e);
        },
        handleCurrenPosition() {
            // 回到当前位置
            this.latitude = 0;
            this.longitude = 0;
            uni.getLocation({
                type: 'gcj02',
                success: res => {
                    this.latitude = res.latitude;
                    this.longitude = res.longitude;
                    this.getMarkers(res.latitude, res.longitude);
                }
            });
        },
        handleClickEnlarge() {
            this.scale += 1; //地图放大
        },
        handleClickShrink() {
            this.scale -= 1; //地图缩小
        }
    }
}
</script>
<style>
.map_style {
    width: 100%;
    height: 100%;
    z-index: -1;
}
.cover-view {
    position: absolute;
    bottom: 20px;
    right: 20px;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: flex-start;
}
.cover-view-image {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    background-color: #ffffff;
    border-radius: 50%;
    margin-bottom: 10px;
}
.cover-view-image-position {
    width: 30px;
    height: 30px;
}
.cover-view-image-scale {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: center;
}
.cover-view-image-enlarge {
    width: 20px;
    height: 20px;
}
.cover-view-image-shrink {
    width: 20px;
    height: 20px;
    margin-top: 10px;
}
</style>

以上代码实现了以下功能:

  • - 在地图上显示当前位置,并以标记点的形式展示附近的餐厅。

  • - 可点击地图获取经纬度。

  • - 可点击标记点查看详细信息。

  • - 提供了地图缩放的功能,可以通过点击放大和缩小按钮来改变地图的缩放级别。

其中,需要注意的是:

  • 在<map>标签中,通过:latitude和:longitude绑定数据来设置地图的经纬度。

  • 通过:show-location="true"来显示当前位置。

  • 通过:scale绑定数据来设置地图的缩放级别。

  • 通过:markers绑定数据来设置标记点的集合,并在每个标记点中设置相应的样式和气泡设置。

  • 监听@tap事件来获取地图上的经纬度。

  • 监听@markertap事件来处理标记点的点击事件。

  • 实例化QQMap对象,并使用其提供的API进行地图相关操作,如获取附近的标记点。

此外,还添加了一些样式来美化地图和按钮的显示效果。

希望这篇文章能够帮助你实现uniapp微信小程序的地图功能!文章来源地址https://www.toymoban.com/news/detail-744636.html

到了这里,关于uniapp微信小程序地图功能实现教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序:简单实现地图导航功能实现

    里面的小图片需要自己找,真机调试时,点击导航即可进入地图,可导航,规划路线… 效果图 代码: wxml js wxss

    2024年02月11日
    浏览(34)
  • uniapp实现微信小程序用户实时位置定位并显示地图

    目前,我们可以通过一些现成的api来实现此功能。下面我将介绍一下通过腾讯位置服务来实现此功能的具体操作流程。 1、在Hbuilder x中对项目进行权限开放 进入到manifest.json文件中   2、获取调用腾讯位置服务所需的key 登录腾讯地图api: 腾讯位置服务 - 立足生态,连接未来

    2024年02月09日
    浏览(33)
  • 【微信小程序支付功能】uniapp实现微信小程序支付功能

    场景 :要实现公司微信小程序的电商模块微信支付功能 一.实现步骤和思路 在登录状态,登录的时候获取到code,利用code获取到 openid: https://blog.csdn.net/weixin_45308405/article/details/128868377?spm=1001.2014.3001.5501 在manifest.json文件“App模块配置”项的“Payment(支付)”下,勾选“微信支付

    2024年02月11日
    浏览(34)
  • uniapp微信小程序获取当前位置信息、经纬度转换、导航地图实现

    1、调用接口,官网文档是这样写的 2、将经纬度转化为位置信息 需要开通腾讯位置服务,开发者每天有一万次的免费转化次数。开通地址  记住当前申请的key值,然后下载微信小程序JavaScriptSDK 然后安全域名设置,在小程序管理后台 - 开发 - 开发管理 - 开发设置 - “服务器域

    2024年02月11日
    浏览(41)
  • UNIAPP 微信小程序实现分享功能

    默认情况下点击微信小程序调试器无法实现分享功能,如下图  此时需要设置如下操作,个人默认习惯是在 utils文件下 创建 share.js 文件 并写入代码 内容如下 然后打开main.js 修改如下 设置完成后再点击右上角的分享就打开了 回到组件内 如果需要通过按钮实现分享功能  参考

    2024年02月04日
    浏览(40)
  • 微信小程序使用高德地图实现检索定位附近周边的POI功能示例

           解压下载的文件得到 amap-wx.js ,在创建的项目中,新建一个名为 libs 目录,将 amap-wx.js 文件拷贝到 libs 的本地目录下。 登录微信公众平台,在 \\\"设置\\\" → \\\"开发设置\\\" 中设置 request 合法域名,将  https://restapi.amap.com  中添加进去,如下图所示:    

    2024年02月03日
    浏览(43)
  • uniapp 微信小程序导出excel功能实现

    需要用到xlsx.core.min.js的js库,以实现导出excel。 下载链接: SheetJS: https://github.com/SheetJS/sheetjs 找到dist目录下,xlsx.core.min.js文件,将它复制到你项目的/common/js/目录下。 1、导入js库; 2、编辑导出数据。  3、利用js库导出excel。 这样就可以了。

    2024年03月21日
    浏览(37)
  • uniapp实现微信小程序全局可分享功能

    uniapp实现微信小程序全局【发送给朋友】、【分享到朋友圈】、【复制链接】 主要使用 Vue.js 的 全局混入 1.创建一个全局分享的js文件。示例文件路径为:./utils/shareWx.js ,在该文件中定义全局分享的内容: 2.在项目的 main.js 文件中引入该 shareWx.js 文件, 并使用 Vue.mixin() 方法将

    2024年02月09日
    浏览(34)
  • uniapp实现微信小程序自带的分享功能

    定义 share.js 文件 在 main.js 中引入挂载

    2024年02月16日
    浏览(28)
  • springboot使用 WxJava 实现 微信小程序(uniapp开发)的登陆功能

    前端使用uniapp来开发微信小程序 后端springboot中使用WxJava来做服务端( WxJava是微信服务端开发 的Java SDK ) 该图来源于微信小程序官方文档 根据uniapp的官网直接通过它提供的第三方 登陆api直接使用,代码如下 直接根据WxJava的官方demo (1) yml配置 (2)两个配置文件 (3)contro

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包