【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存

这篇具有很好参考价值的文章主要介绍了【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

功能需求

使用的技术点

注意点

实现步骤

代码

微信小程序-地图所在的wxml

微信小程序-地图所在的js

微信小程序-展示截图结果的wxml

微信小程序-展示截图结果的js

H5-地图所在的html

完成效果 

参考文档

感谢阅读,欢迎讨论


功能需求

打开页面展示卫星地图,用户自行在地图上绘制多边形并给每个点进行距离计算,完成多边形绘图后显示计算面积

使用的技术点

微信小程序的web-view

官方文档:web-view | 微信开放文档

高德地图的地图JS API 

官方文档:概述-地图 JS API 2.0 | 高德地图API

<!-- JS文件引入 -->
<!-- web-view的微信小程序js文件 -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<script src="https://webapi.amap.com/loader.js"></script>

注意点

1、web-view在个人小程序是不支持的,上线时需要在小程序后台设置开放web-view的request域名;

2、web-view如何在微信开发工具调试?

在模拟器的界面左下角栏目中,找到debug图标(小虫子),点击即可查看

【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存,前端,微信小程序

3、高德地图的js api需要在高德开发者平台进行申请;

实现步骤

1、微信小程序页面定义web-view组件,在js文件中进行url的动态传入(url增加随机参数避免无刷新);

2、编写H5页面实现在高德卫星地图绘制多边形的功能;

3、H5触发完成动作发送数据包给微信小程序,微信小程序接收截图数据

代码

微信小程序-地图所在的wxml

<web-view wx:if="{{ url }}" src="{{url}}" bindload="loadWebView" binderror="errorWebView" bindmessage="messageWebView">
</web-view>
 

微信小程序-地图所在的js

Page({
  data: {
    latitude: '23.099994',
    longitude: '113.324520'
  },

  onLoad() {
      this.setData({url:'https://52381x1l37.zicp.fun/web/gaode?random=' + Math.random() + '#wechat_redirect'})
  },

  loadWebView(e) {
    console.log("加载web-view成功",e)
  },

  errorWebView(e) {
    console.log("加载web-view失败",e)
  },

  messageWebView(e) {
    console.log("web-view信息接收", e)
    // 记录base64的图片数据到缓存中,方便读取
    let h5Data = e.detail.data[0]
    if (h5Data.opera == 'finish') {
      wx.setStorageSync('finishBase64', h5Data.base64)
    }
  },  
})

微信小程序-展示截图结果的wxml

<view>
  <view style="font-size: 20px;font-weight: bold;text-align: center;">截图的图片</view>
  <image src="{{src}}"></image>
  <view style="font-size: 20px;font-weight: bold;text-align: center;">图片的base64数据</view>
  <view style="word-break: break-all;width:100%;">{{base64Text}}</view>
</view>

微信小程序-展示截图结果的js

Page({
  /**
   * 页面的初始数据
   */
  data: {
    src: '',
    base64Text: '', 
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if (wx.getStorageSync('finishBase64')) {
      this.setData({
        src: wx.getStorageSync('finishBase64'),
        base64Text: wx.getStorageSync('finishBase64'),
      })
    }
  }
})

H5-地图所在的html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{$title}}</title>
</head>
<style>
    body,html,#container {
        width: 100%;
        height: 100%;
        margin: 0;
    }
</style>
<body>
<div id="container"></div>
<div id="app">
    <div style="font-size:14px;background:#fff;color: black; padding: 1px 5px;position: fixed; bottom:5%;right:10%;"
         @click="clickFinishSign()">完成</div>
</div>
</body>
</html>
<!-- 微信小程序 -->
<script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
<!-- 高德地图 -->
<script src="https://webapi.amap.com/loader.js"></script>
<script>

</script>
<script>
    let map = null
    new Vue({
        el: '#app',
        data: {},
        methods: {
            clickFinishSign() {
                console.log("clickFinishSign")
                wx.miniProgram.getEnv(function(res) {
                    console.log(res,'res')
                    if (res.miniprogram) {
                        setTimeout(function(){
                            let container = document.getElementById('container')
                            html2canvas(container, {
                                scale: 1,
                                useCORS: true,
                                allowTaint: true,
                                height: container.clientHeight / 2, // 设置画图的高度
                                width: container.clientWidth, // 设置画图的宽度
                                x: 0, // 设置画图开始的位置,X轴
                                y: container.clientHeight / 4, // 设置画图开始的位置,Y轴
                            }).then(canvas => {
                                let base64 = canvas.toDataURL('image/jpeg')
                                console.log("高度:"+container.clientWidth,"宽度:" + container.clientHeight, "图片:" + base64)
                                wx.miniProgram.postMessage({data: {base64: base64, opera: 'finish'}})
                                wx.miniProgram.redirectTo({url: '/pages/finish/finish'})
                            })
                        },1000)
                    } else {
                        alert("请在微信小程序进行此操作")
                    }
                })
            }
        },
        mounted() {
            // 设置地图的初始中心点
            let center = [116.308904,39.913423]
            AMapLoader.load({ //首次调用 load
                key: "{{$webJsApiKey}}",//首次load key为必填
                version:'2.0',
                plugins:['AMap.TileLayer.Satellite']
            }).then((AMap)=>{
                map = new AMap.Map('container', {
                    layers: [new AMap.TileLayer.Satellite()],
                    zoom: 10,
                    zooms: [10, 25], // 控制缩放范围
                    center: center, // 地图中心点
                    WebGLParams: {preserveDrawingBuffer: true} // 设置允许截取高德地图图片内容
                });

                let o = new AMap.Polygon({map: map, path: [
                        new AMap.LngLat(116.308904,39.913423),
                        new AMap.LngLat(116.322122,39.901176),
                        new AMap.LngLat(116.338258,39.904600),
                        new AMap.LngLat(116.327271,39.912501),

                    ]})
                var area = Math.round(AMap.GeometryUtil.ringArea(o.getPath()))
                var text = new AMap.Text({
                    position: new AMap.LngLat(116.327271,39.912501),
                    text: '面积:' + area + '米',
                })
                map.add(text)
                let markers = [
                    [
                        new AMap.Marker({label: {content: 'E'}, position: new AMap.LngLat(116.308904,39.913423), map: map}),
                        new AMap.Marker({label: {content: 'F'}, position: new AMap.LngLat(116.322122,39.901176), map: map}),
                        new AMap.Marker({label: {content: 'G'}, position: new AMap.LngLat(116.338258,39.904600), map: map}),
                        new AMap.Marker({label: {content: 'H'}, position: new AMap.LngLat(116.327271,39.912501), map: map})
                    ],
                ];
                map.add(markers)
                map.setFitView() // 自适应显示标记的图案
            }).catch((e)=>{
                console.error(e);
            });
        }
    })
</script>

完成效果 

【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存,前端,微信小程序

参考文档

微信小程序之webview H5以小程序 的跳回,传值触发动作_微信小程序 bindmessage_夲木^_^的博客-CSDN博客

小程序web-view组件向微信小程序传递支付参数,并调起微信支付_如沐春风xsy的博客-CSDN博客

 微信小程序 webview h5 参数传递问题( token 登录状态同步) - 知乎

H5页面与微信小程序相互跳转并传参(web-view) - 知乎 文章来源地址https://www.toymoban.com/news/detail-736873.html

感谢阅读,欢迎讨论

到了这里,关于【微信小程序】微信小程序集成高德卫星地图完成多边形绘制与截图保存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序腾讯地图定位转高德地图定位

    微信小程序获取到了当前用户的定位,需要在高德地图上进行渲染。 发现正常渲染后,偏差几百米。 这里图方便,直接丢到window上了 这里演示“腾讯地图”转“高德地图”

    2024年01月25日
    浏览(95)
  • 微信小程序使用高德地图获取当前定位

    1.在腾讯地图官网注册一个key(创建一个应用会自动生成一个key,详细步骤如图) 腾讯位置服务 - 立足生态,连接未来 注意点:开通webserviceAPI服务:控制台 -应用管理 - 我的应用 -添加key- 勾选WebServiceAPI - 保存 (小程序SDK需要用到webserviceAPI的部分服务,所以使用该功能的KEY需

    2024年02月06日
    浏览(64)
  • 微信小程序引入高德地图Demo 快速上手

    本文参照官方文档进行编写 最后引入官方实例 最终效果 ` 注册账号 https://lbs.amap.com/?ref=http%3A%2F%2Flbs.amap.com%2Fdev%2F#/ 获取Key教程 https://lbs.amap.com/api/wx/guide/create-project/get-key/ 访问网址 https://github.com/amap-demo/wx-regeo-poiaround-weather 下载微信小程序实例 用微信开发者工具打开 打开

    2024年02月11日
    浏览(79)
  • 微信小程序---- 外卖小程序查看实时地图路线(骑手端&用户端)【高德地图】

    前言:1. 在小程序中需要使用map组件,文档链接:https://developers.weixin.qq.com/miniprogram/dev/component/map.html 2.使用的是高德地图,所以需要引进相关的js,下载链接:https://lbs.amap.com/api/wx/download 3.去往高德官方申请需要用的key,操作链接:https://lbs.amap.com/api/wx/guide/create-project/get-key

    2024年02月16日
    浏览(61)
  • uniapp---- 微信小程序中获取当前地理位置(高德地图)

    1.在manifest.json中选择微信小程序配置,勾选上位置接口。 2.在manifest.json中选择源码视图,添加permission和requiredPrivateInfos 3.进入微信公众平台添加合法域名(不能少但是可以放在最后添加,调试期间可以打开开发者工具的不校验合法域名) 4.下载amap-wx.130.js,并且进行引用,

    2024年02月12日
    浏览(60)
  • uni微信小程序跳入外链(以高德地图为例)

    前瞻:vue项目在跳转外部链接时一般使用:window.open 或者 href 都离不开window这一属性,但总所周知 微信小程序并不存在 window这一属性,所以在这个时候我们需要加以变通 方法1: 1:跳入外部链接,此链接应该是 https加域名的链接,如果不是https的 那不可以 2:配置 将你所需

    2024年02月20日
    浏览(58)
  • 微信小程序学习实录3(环境部署、百度地图微信小程序、单击更换图标、弹窗信息、导航、支持腾讯百度高德地图调起)

    百度地图微信小程序JavaScript API(简称小程序JSAPI),支持在微信小程序中使用百度数据资源。小程序JSAPI是对百度地图Web服务API中的部分接口按照微信小程序的规范进行了前端JS封装,方便了微信小程序开发者的调用。部分接口对返回的POI等数据按照微信小程序的数据格式进

    2024年02月02日
    浏览(74)
  • 【微信小程序】免费的高德地图api——获取天气(全过程)

    介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力? 我见过最好的答案就是:因为我喜欢的东西都很贵,

    2024年02月02日
    浏览(88)
  • 基于微信小程序Map标签及高德地图开源方法实现路径导航

            微信小程序自带地图map标签,他是基于canvas画图功能进行的地图渲染,同时依赖微信的getlocation获取经纬度,绘制周边地图。地图上可以标点,画线,查看当地地理信息。但是自带的导航功能模块不能对个人开发者公开。         高德地图提供了基于微信小程

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

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

    2024年02月03日
    浏览(70)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包