使用vue+腾讯地图API GL实现地图选房的功能

背景介绍

公司最近想做一个地图选房的功能,在网上找了很久也没有找到这方面的demo,就只好硬着头皮自己写一个地图选房的功能 腾讯地图的官方文档.首先我们要确定好使用的API,本人就在这方面被坑了,官方API的地图缩放级别最大是10km 但是由于需要用户选择房间 所以会导致最大的缩放级别也不能满足需求,只有通过公司和腾讯那边商量改腾讯地图API最大缩放级别的比例尺范围,这个一定要在前期做好以后确认腾讯给改的是哪个API,本人就一开始使用的javascript APL 基本上功能已经实现了 但是等到腾讯改完比例尺发现是javascript API GL 导致心态瞬间爆炸,废话不多说接下来说一下两种API的实现方法,首先说一下javascript API GL这个API是怎么实现的吧
首先申请腾讯地图Key 这个是公司和腾讯申请改动比例尺专用的key
在index.html内的的body标签引入javascript API GL

<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&key=xxxxxxxxxxxxxxxx"></script>

然后通过图片的左下角和右上角坐也就是楼层的西南角坐标和东北角坐标 计算出楼层的中心点坐标

let center = new TMap.LatLng((parseFloat(NE[0]) + parseFloat(SW[0])) / 2,(parseFloat(NE[1]) + parseFloat(SW[1])) / 2),

创建地图

that.map = new TMap.Map("map_canvas", {zoom:20, //设置地图缩放级别center: center, //设置地图中心点坐标minZoom: 14,viewMode: "2D",  // 视图模式baseMap: {type: "vector",features: ["base"] // 隐藏矢量文字   防止楼层图片被地图的楼层图层盖上}   // 地图地图});

使用官方文档的CanvasGroundLayer自定义图片图层,使用中发现文档里的ImageGroundLayer这个API也能实现,但是在实现过程中发现这个API使用的图片会跨域,给微信提过问题工单,他们不负责解决这个跨域问题,无奈之下使用CanvasGroundLayer这个API自己画图

首先把图片转canvas 创建一个canvas

let ImageBounds = new TMap.LatLngBounds(imgSW, imgNE);let img = new Image();img.crossOrigin = "anonymous";img.src = floor.ImageUrl + "?time=" + new Date().valueOf();let canvas = document.createElement("canvas");if (img.complete) {  // 检测图片是否加载完成canvas.width = img.width;canvas.height = img.height;canvas.getContext("2d").drawImage(img, 0, 0);let historicalOverlay = new TMap.CanvasGroundLayer({bounds: ImageBounds,canvas: canvas,map: that.map,zIndex: 1000,minZoom: 12,maxZoom: 20});} else {// 未加载完成要调一下onload方法img.onload = function() {canvas.width = img.width;canvas.height = img.height;canvas.getContext("2d").drawImage(img, 0, 0);let historicalOverlay = new TMap.CanvasGroundLayer({bounds: ImageBounds,canvas: canvas,map: that.map,zIndex: 999999,minZoom: 12,maxZoom: 20});};}

到这图片就已经放在地图图层上面了
接下来就是画每个房间的房型,使用方法采取的是绘制多边形的方法MultiPolygon
首先,我们要确定每个多边形的数据 采用的PolygonGeometry确定多边形数据

let polygonStyles = {}; // 存放所有多边形的样式
let roomPolygons = []; // 存放所有多边形的数据for (let j = 0; j < pointInfo.length; j++) {let roomPointInfo = pointInfo[j];roomPolygon.push(new qq.maps.LatLng(parseFloat(roomPointInfo[1]),parseFloat(roomPointInfo[0])));}if (roomPolygon.length <= 3) {return;}let geometrie = {id: floor.Rooms[i].ChamberNumber, //多边形图形数据的标志信息styleId: floor.Rooms[i].ChamberNumber, //样式idpaths: roomPolygon, //多边形的位置信息properties: {//多边形的属性数据title: ""}};roomPolygons.push(geometrie);polygonStyles[floor.Rooms[i].ChamberNumber] = new TMap.PolygonStyle({color: "rgba(14, 136, 192, 0.5)", //面填充色showBorder: true, //是否显示拔起面的边线borderColor: "rgba(255,255,255,0)"});

这样一个多边形的数据就建好了 接下来我们把多个多边形绘制到地图上

that.roomPolygonList = new TMap.MultiPolygon({id: "polygon-layer",styles: polygonStyles,map: that.map,geometries: roomPolygons});that.roomPolygonList.on("click", function(res) { // 添加多边形点击事件let geometry = res && res.geometry;that.chooseRoom(geometry.id);});

到这我们就把地图选房的功能做好了

第二种方法使用JavaScript API实现地图选房

由于这个API实现的方法被我换成javascript API GL以后 代码被我删掉了
所以就大概使用了哪些API

new qq.maps.Map(mapContainer, options);

这个和javascript API GL创建地图的方式不一样

使用qq.maps.GroundOverlay创建图片图层和ImageGroundLayer这个类似,但是不会出现跨域问题

创建多边形qq.maps.Polygon和MultiPolygon这个方法不一样 这个创建一个多边形就需要添加到地图上,然后添加点击事件绑定click点击事件出来用户点击房间的方法

使用vue+腾讯地图API GL实现地图选房的功能相关推荐

  1. 调用腾讯地图API、高德地图API 获取当前地理位置、经纬度

    调用腾讯地图API.高德地图API 获取当前地理位置.经纬度 web开发中,很多情况下都会需要获取当前位置的经纬度,在网上找了几个不同的地图,最终找到兼容比较好的腾讯地图API 1.调用腾讯地图API ...

  2. 百度地图API GL使用总结

    百度地图API GL使用总结 百度地图API GL使用总结 项目需求 具体实现 解析地址 显示路径 获取坐标 完整代码 百度地图API GL使用总结 JavaScript API GL v1.0是目前 ...

  3. 【百度地图API】暑假放假回老家——城市切换功能

    原文:[百度地图API]暑假放假回老家--城市切换功能 任务描述: 酸奶小妹放寒假啦,要从北京呼啦一下飞回重庆呢.现在百度地图API上不能直接切换城市,怎么办呢? 如何实现: 利用API先搜索到要去城 ...

  4. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  5. HTML调用百度地图API,实现地图标注位置

    HTML调用百度地图API,实现地图标注位置 一.说明 二.代码 总结 提示:以下是本篇文章正文内容,下面案例可供参考 一.说明 通过HTML调用百度地图API,在指定位置显示出地图,并且在目标位置标 ...

  6. 百度地图 api php,百度地图API使用方法详解

    百度地图api是由javascript语言编写的,在使用之前需要把api引用到页面中,本篇文章给大家介绍百度地图api使用方法,需要的朋友可以参考下 最近做了个项目,其中项目中有个需求需要用到百度地图 ...

  7. python 实现对地图的点击_利用python和百度地图API实现数据地图标注的方法

    如题,先上效果图: 主要分为两大步骤 使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过 ...

  8. 根据百度地图API自定义切换地图类型为卫星或普通

    业务场景 根据实际业务场景的需要,不能直接使用百度地图的控件,所以打算用百度地图API中map类的setMapType()方法实现.在Vue3中使用百度地图API切换地图类型为卫星或普通,创建一个自定 ...

  9. H5 调用地图API + Apiclound 打开地图APP

    地图API: 入门指南-URI API | 高德地图API URI API | 百度地图API SDK URI API(地图调起) | 腾讯位置服务 百度打开起点-终点导航示例: APIClound打 ...

最新文章

  1. ig信息增益 java_文本分类综述
  2. Python 执行SQL带参数
  3. linux 线程优先级的高低和执行顺序的关系,混乱的Linux内核实时线程优先级
  4. 程序员如何用gRPC谈一场恋爱
  5. 图合成与差分隐私(图结构和节点属性)论文笔记
  6. 在iframe中显示嵌套网页的指定部分
  7. FileZilla软件下载使用简易教程
  8. SpringMVC框架、Spring boot框架、SSM區別
  9. 从零开始刷Leetcode——数组(941.977)
  10. 如何下载:卫星地图高清2018,谷歌地图高清卫星地图,最新Google卫星地图
  11. 红米6 Pro开启ROOT权限的教程
  12. 基于网站API的爬虫
  13. 兴业数金java开发笔试+一面
  14. H5 VIDEO标签视频黑屏的原因及解决方法
  15. C#Application.DoEvents();的作用。
  16. eigen冲突 sophus 安装_SVO-SLAM环境搭建指南
  17. python dataframe是什么_什么是Pandas的DataFrame?
  18. Unity ASE制作彩色流光马赛克 像素风 舞池DJ台效果Shader
  19. mysql求当月有多少天
  20. 全产业链模式的竞争优势

热门文章

  1. 教你如何用好MindMapper
  2. 属性子集选择的基本启发方法_3.4.4 属性子集选择
  3. 浴血黑帮第三季/全集Peaky Blinders迅雷下载
  4. Linux 学习目录
  5. ACM 各大OJ平台以及题目分类
  6. react---收藏的点击和取消(刷新还会存在)--demo
  7. 关心国事-周鸿祎离开雅虎真相 自称土鳖更喜欢创业
  8. 六轴机械臂的IK (腕姿态部分) | 机械臂运动学笔记(四)
  9. Rust模板引擎Tera中文英文对照官方文档
  10. 安装有关软件出现无法访问windows Installer服务。