百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

微信小程序地图开发总结(微信小程序开发新地图是什么意思)

bigegpt 2024-08-03 11:36 1 浏览

最近在做一个微信小程序地图插件,通过传入起始位置名称和经纬度信息,就可以跳转到路线规划插件页面中,在该页面中,可以根据起始位置查询自驾,公共交通,步行等方式的路线信息,并且在地图上显示路线信息,在这个过程中,用到了微信小程序的组件map和腾讯地图sdk,接下来主要对微信小程序的地图开发进行总结

一、微信小程序地图组件

为了方便微信小程序使用地图的相关功能,微信小程序为我们提供了map组件,通过这个组件,我们可以很简单的引入地图,并且还可以进行个性化地图的开发

1、map组件

微信小程序提供的地图组件,使用该组件只需要在wxml文件中加入下面的代码

<map id="map" longitude="113.324520" latitude="23.099994" scale="14" style="width: 100%; height: 300px;"></map>

上面这个例子中,我们只是简单的为该组件传入经纬度信息,并且设置缩放级别,当然,map组件还包括以下一些常用的属性

属性类型说明是否必填longitudenumber中心经度是latitudenumber中心纬度是scalenumber缩放级别,取值范围为3-20否markersArray.<marker>标记点否polylineArray.<polyline>路线否include-pointsArray.<point>缩放视野以包含所有给定的坐标点否enable-trafficboolean是否开启实时路况否bindregionchangeeventhandle视野发生变化时触发否bindpoitapeventhandle点击地图poi点时触发否

其中,longitude和latitude这两个属性是必须填写的,如果没有填写,地图将无法正常显示,除了上面的属性之外,还有很多其它属性,其它属性请前往微信小程序官方文档进行查看

2、map组件常用的属性介绍

(1)longitude和latitude属性

一般来说,我们需要设置地图的中心经纬度地图才能够正常显示,如果我们传入的是起点经纬度srcLat和srcLng,终点经纬度dstLat和dstLng,如果想要得到其中心坐标,可以通过如下的计算得到:

centerLat = (srcLat + dstLat) / 2

centerLng = (srcLng + dstLng) / 2

通过以下简单的计算,就可以设置出地图的中心经纬度

(2)markers属性

在很多情况下,我们经常需要在地图上添加一些标记点,比如我们希望插件中指定的起点和终点都能够用自定义的图标进行表示,这个时候就可以用到markers属性啦

Page({
 data: {
 markers: [{
 iconPath: "/resources/start.png",
 id: 0,
 latitude: srcLat,
 longitude: srcLng,
 width: 50,
 height: 50
 },
 {
 iconPath: "/resources/end.png",
 id: 0,
 latitude: dstLat,
 longitude: dstLng,
 width: 50,
 height: 50
 }]
})

(3)polyline属性

polyline属性主要指定一系列坐标点,当我们设置了这些坐标点之后,将会从这些坐标点的第一个坐标点连线连到最后一个坐标点,当我们需要在地图上显示起点和终点之间的路线时,就可以用polyline属性进行设置

Page({
 data: {
 polyline: [{
 points: [{
 longitude: 113.3245211,
 latitude: 23.10229
 }, {
 longitude: 113.324520,
 latitude: 23.21229
 }],
 color:"#FF0000DD",
 width: 2,
 dottedLine: true
 }]
})

关于polyline属性的具体属性介绍,可以查看微信小程序官方文档

3、地图相关的API

为了更好的使用地图的功能,微信小程序也是为我们提供了关于操作地图的相关API

(1)wx.createMapContext(string mapId, Object this)

创建map上下文MapContext 对象

(2)MapContext.getCenterLocation(Object object)

获取当前地图中心的经纬度

(3)MapContext.getRegion(Object object)

获取当前地图的视野范围

(4)MapContext.getScale(Object object)

获取当前地图的缩放级别

(5)MapContext.includePoints(Object object)

缩放视野展示所有经纬度

(6)MapContext.moveToLocation()

将地图中心移动到当前定位点

(7)MapContext.translateMarker(Object object)

平移marker,带动画

使用上面的这些API,可以方便我们对map组件进行一些操作,下面来看个简单的例子

<map id="myMap" show-location />
<button type="primary" bindtap="getCenterLocation">获取位置</button>

当点击获取位置时,我们可以通过相关的API进行获取当前的中心位置

Page({
 onReady: function (e) {
 // 使用 wx.createMapContext 获取 map 上下文
 this.mapCtx = wx.createMapContext('myMap')
 },
 getCenterLocation: function () {
 this.mapCtx.getCenterLocation({
 success: function(res){
 console.log(res.longitude)
 console.log(res.latitude)
 }
 })
 }
})

4、使用位置服务相关的API

在进行地图开发的时候,我们经常需要使用内置软件,高德地图,腾讯地图这些进行导航,这个时候可以使用相关的位置服务API

(1)wx.openLocation(Object object)

使用微信内置地图查看位置

(2)wx.getLocation(Object object)

获取当前的地理位置、速度

(3)wx.chooseLocation(Object object)

打开地图选择位置

当我们指定一个终点位置,然后希望能够使用内置地图软件进行导航时,可以这样实现

wx.openLocation({
 latitude: dstLat,
 longitude: dstLng,
 name: '终点名称'
})

5、使用map组件的一些问题

map组件提供了很多地图的相关功能,但是使用map组件可能会遇到下面这些问题

(1)map组件及微信小程序的API无法提供路线规划,地址转换等功能

可以使用腾讯地图sdk,高德地图sdk,百度地图sdk等进行开发,比如腾讯位置服务为微信小程序提供了基础的标点能力、线和圆的绘制接口等地图组件和位置展示、地图选点等地图API位置服务能力支持,使得开发者可以自由地实现自己的微信小程序产品,通过使用这些服务,再配合map组件,可以开发出具有各种各样功能的地图

(2)map组件的层级问题

map组件的层级被设置为最高,不能通过z-index进行设置,因此使用map组件可能会遮住一些文字图片等内容,可以通过cover-view进行解决,将文字和图片内容嵌套在cover-view中,但是cover-view只能嵌套cover-view和cover-image

二、在微信小程序中使用腾讯地图服务

虽然map组件使我们可以很方便的使用地图,但是map组件只提供了最基本的地图显示功能,同时,微信小程序提供的关于地图的API也只是提供了一些简单的功能,在实际中无法满足我们的各种需求,如果需要使用到路线规划,距离计算等功能,我们可以在微信小程序中接入腾讯地图,高德地图,百度地图等服务,再结合map组件,去实现我们需要的功能

下面以腾讯地图为例来介绍如何在微信小程序中使用腾讯地图服务

1、密钥的申请以及域名的设置

在微信小程序中使用腾讯地图服务大致需要进行如下几个过程:

(1)申请开发者密钥

这里需要填写Key的名称,名称可以根据实际项目应用来命名,申请成功后,会生成一串开发者密钥

(2)开通webserviceAPI服务

a、点击右上角的控制台

b、选择key管理

c、进入设置,勾选webserviceAPI,点击保存

(3)域名的配置

上面的两个步骤都是在腾讯位置服务平台上进行的操作,要进行域名的配置,还需要登录微信公众平台进行域名的配置

在开发小程序时,我们都会使用自己的APPID进行开发,只有配置了相关的域名,在请求时才能向指定的域名发送请求

在“设置” -> “开发设置”中设置request合法域名,添加https://apis.map.qq.com

(4)下载微信小程序JavaScriptSDK

如果完成了上面几个步骤,我们就可以在微信小程序中使用腾讯地图服务啦,在微信小程序中新建一个项目,写入APPID,记得这个APPID需要在微信公众平台中进行了域名的配置,不然会报错

2、实现路线规划

下面举一个简单的小例子,给定起点和终点经纬度,计算出起点和终点之间的路线

首先,需要引入我们刚才下载的JavaScriptSDK

// 引入SDK核心类
var QQMapWX = require('xxx/qqmap-wx.js');

进行API核心类的实例化

// 实例化API核心类
var qqmapsdk = new QQMapWX({
 key: '开发密钥(key)' // 必填
});

接着,我们需要通过调用路线规划的接口direction获取路线,direction接口可以提供驾车、骑行、步行、公交等路线规划功能

direction接口传入的参数如下

(1)mode

String,路线规划选择,可选值:'driving'(驾车)、'walking'(步行)、'bicycling'(骑行)、'transit'(公交),默认:'driving'

(2)from

String格式:lat<纬度>,lng<经度>(例:from: '39.984060,116.307520')

Object格式:{latitude: 纬度,longitude: 经度}(例:from: { latitude: 39.984060,longitude: 116.307520})

(3)to

String格式:lat<纬度>,lng<经度>(例:location: '39.984060,116.307520')

Object格式:{latitude: 纬度,longitude: 经度}(例:to: { latitude: 39.984060,longitude: 116.307520})

下面给一个根据起点和终点实现路线规划的例子

<!--wxml-->
<map id="myMap" style="width: 100%; height: 300px;"
longitude="{{longitude}}" latitude="{{latitude}}" scale='16' polyline="{{polyline}}" show-location></map>
<!--js-->
// 引入SDK核心类
var QQMapWX = require('xxx/qqmap-wx.js');
 
// 实例化API核心类
var qqmapsdk = new QQMapWX({
 key: '开发密钥(key)' // 必填
});
Page({
 data: {
 srcLat: '起点经度',
 srcLng: '起点纬度',
 dstLat: '终点经度',
 dstLng: '起点纬度',
 latitude: '',
 longitude: ''
 },
 onLoad() {
 var _this = this;
 //调用距离计算接口
 qqmapsdk.direction({
 mode: 'driving',//可选值:'driving'(驾车)、'walking'(步行)、'bicycling'(骑行),不填默认:'driving',可不填
 //from参数不填默认当前地址
 from: {
 latitude: _this.data.srcLat,
 longitude: _this.data.srcLng
 },
 to: {
 latitude: _this.data.dstLat,
 longitude: _this.data.dstLng
 }, 
 success: function (res) {
 console.log(res);
 var ret = res;
 var coors = ret.result.routes[0].polyline, pl = [];
 //坐标解压(返回的点串坐标,通过前向差分进行压缩)
 var kr = 1000000;
 for (var i = 2; i < coors.length; i++) {
 coors[i] = Number(coors[i - 2]) + Number(coors[i]) / kr;
 }
 //将解压后的坐标放入点串数组pl中
 for (var i = 0; i < coors.length; i += 2) {
 pl.push({ latitude: coors[i], longitude: coors[i + 1] })
 }
 console.log(pl)
 //设置polyline属性,将路线显示出来,将解压坐标第一个数据作为起点
 _this.setData({
 latitude:pl[0].latitude,
 longitude:pl[0].longitude,
 polyline: [{
 points: pl,
 color: '#FF0000DD',
 width: 4
 }]
 })
 },
 fail: function (error) {
 console.error(error);
 },
 complete: function (res) {
 console.log(res);
 }
 });
 
 }
}) 

腾讯地图服务还提供了距离计算等其它功能,具体功能可以查看腾讯地图服务官方文档

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...