最新要闻
- 环球视点!无损压缩鼻祖去世了 没有他就没有今天的Zip、PNG、PDF
- 当前观点:博主“科普”鲸鱼会假装搁浅吸引人来救 博物杂志辟谣:九死一生
- 天天快讯:行驶中会“熄火” 大众召回超2万辆ID.4电动车
- 世界报道:欧洲玩家吐槽《霍格沃茨之遗》捏脸系统:最浅的皮肤选项依然很深
- 情人节必备:德芙香浓黑巧12元/碗大促
- 逃离银河系!科学家在仙女星系中发现银河移民
- 世界快播:山东女子中淘宝彩票锦鲤:直播1小时刮594张彩票 中7170元
- 天天滚动:骁龙8+满血版、残血版差价非常大 一加揭秘:能差1个亿
- 防止技术垄断:昆仑万维宣布将在年内开源类ChatGPT代码
- 微头条丨女子带汉堡进星巴克被拦 称味道大会影响其他顾客 网友抵制
- 微信数据再多都够用 真我GT Neo5 1TB干到3499元:旗舰射门员
- 新资讯:14岁女孩连续玩手机81小时险猝死 专家提醒:家长一定要控制
- 【环球时快讯】1TB手机不到3500元!网友评价真我GT Neo5:这让友商很难做
- 世界新消息丨又多了一种摸鱼手段 小红书网页版上线:左图右文 沉浸大屏
- 信息:首个教育圈ChatGPT来了!网易有道将推生成式AI:可批改作文
- 每日快播:创下历史第二!《霍格沃茨之遗》steam在线人数达48万
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天简讯:记录--Cesium+Vue实战教程——地图导航
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
项目效果
我们今天要实现的是一个路径规划的功能,有两个输入框。输入起点终点,然后查询,得到规划的路径,效果如下:
(资料图)
我们会用到以下库:
Axios:用于发送请求,请求高德地图的地理编码API
Jquery:也用于发送请求
Cesium:地图框架
Vue:前端框架
前期准备
路径规划目前我们没有路网数据,所以自己做不了(后面可以出一期),因此我们可以请求百度地图的api,但前提是我们有起点和终点的经纬度,没有人会用经纬度来导航吧?因此我们还需要进行地理编码,把中文转化具体的地理位置(经纬度),这里我们用了高德的api,最后我们地图需要切片数据,默认会用Cesium自带的资源,因此也要注册一个cesium的账号,来获取token,如果用了自己的底图资源也可不用,为了演示的方便,我们还是申请一下,因为cesium还是自带了很多的资源,便于后期的学习。
- 注册Cesium.ion获取token
- 注册高德地图Api,获取key
- 注册百度地图Api,获取key
注册cesium ion
Access Tokens | Cesium ion,注册后获取token:
注册高德地图API
记得选择Web服务,里面是包括地理编码api的,然后会给你个key
注册百度地图API
注意下选择服务端就行,里面服务包括了路径规划,之所以用百度而不用高德是因为,高德的路径规划返回的没有经纬度,后面就没办法绘制线段了。
代码时间
1. 项目结构:
一个Demo.html文件和public文件夹(里面放置cesium下载的内容:)
下载cesium库Downloads – Cesium,并放在public文件夹中
2. Html引用我们文件
Hello World! <script src="public/Cesium-1.100/Build/Cesium/Cesium.js"></script> <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.0.js"></script>
3. 使用vue管理页面
我们看看这段代码,首先我们通过解析赋值,从vue中获取了createApp函数,这个函数是承载了所有我们后面的操作,并通过mount绑定了id为app的元素,因为要做到响应式,其实vue是通过虚拟dom来对app元素里面的内容进行操作,比如响应式更新我们的input,新建元素等等。
const { createApp } = Vue var viewer, cesiumKey = "这里写你自己申请的token", aMapKey = "这里写你自己申请的key"", baiduKey = "这里写你自己申请的key" createApp({ data() { return { input1: "北京", input2: "上海", } }, }).mount("#app")
在vue中,我们所有的函数都写在methods里面,如下所示:
我们写了一个createMap函数,初始化了一个cesium地图,并在mounted里面用this.createMap()调用,因为vue的生命周期mounted里才会获取到dom,更多可以去了解一下vue的生命周期。
createApp({ data() { return { input1: "北京", input2: "上海", } }, methods: { createMap() { Cesium.Ion.defaultAccessToken = cesiumKey;// 传入id,初始化地图 viewer = new Cesium.Viewer("cesiumContainer", { infoBox: false, imageryProvider: new Cesium.UrlTemplateImageryProvider({ url: " http://webrd02.is.autonavi.com/appmaptile? lang=zh_cn&size = 1&scale = 1&style = 8&x = {x} &y = {y} &z ={z} ", }) }); viewer.bottomContainer.style.display = "none";//隐藏bottomContainer var imageList = viewer.baseLayerPicker.viewModel.imageryProviderViewModels; //使用第4个(索引为3,内容为ESRI世界影像)imageryProvider作为默认的地形数据提供者 //以免使用默认的BING服务,有时刷不出图像的情况 viewer.baseLayerPicker.viewModel.selectedImagery = imageList[3]; //加入中文注记 //增加一个图层:天地图全球影像中文注记服务 var imageLabelCn = new Cesium.ImageryLayer(new Cesium.WebMapTileServiceImageryProvider({ url: "http://t0.tianditu.com/cia_w/wmts?tk=a2ca005a710864da5d797e35e0f45b3b", layer: "cia", style: "default", format: "tiles", tileMatrixSetID: "w", maximumLevel: 18 })); viewer.scene.imageryLayers.add(imageLabelCn); viewer.camera.setView({ destination: Cesium.Cartesian3.fromDegrees(110, 30, 15000000.0), // 设置位置 orientation: { heading: Cesium.Math.toRadians(0.0), // 方向 pitch: Cesium.Math.toRadians(-90.0),// 倾斜角度 roll: 0 } }); }, mounted() { this.createMap() }, }).mount("#app")
4. 地理编码
使用axios.js请求高德地图的地理编码,获取文本位置的经纬度坐标
async getAddress(loc) { const response = await axios.get(`https://restapi.amap.com/v3/geocode/geo?address=${loc}&key=${aMapKey}`) return response.data.geocodes[0].location }, async getRoad(loc, loc2) { const response = await axios.get(`https://restapi.amap.com/v3/direction/driving?origin=${loc}&destination=${loc2}&key=${aMapKey}`) return response },
5. 路径规划
getJsonpPosition函数是根据起点终点的经纬度进行路径规划,并以jsonp的格式返回,这种方法可以解决百度地图api跨域的问题
然后当点击按钮的时候会调用search函数,获取input的值,然后地理编码变成经纬度,再调用getJsonpPosition获取到线段的经纬度数组,最后用createpolyline绘制路径。
getJsonpPosition(start, end) { $.ajax( { url: `https://api.map.baidu.com/direction/v2/driving?origin=${start}&destination=${end}&ak=${baiduKey}`,//GET请求 type: "get", dataType: "jsonp", async: false, jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback) success: (response) => { console.log(response); let resArr = [] if (response.status == 0) { const res = response.result.routes[0].steps.map((item) => { const stringArr = item.path.split(";") stringArr.map((x) => { numArr = x.split(",") resArr.push(...numArr) }) }) resArr = resArr.map((item) => { return Number(item) }) console.log(resArr) this.createpolyline(resArr, viewer) } } } ) }, async search() { console.log(this.input1, this.input2,) if (this.input1 == "" || this.input2 == "") { alert("输入框不能为空!") return } const data = await this.getAddress(this.input1) const data2 = await this.getAddress(this.input2) const data_1 = data.split(",") const data_2 = data2.split(",") data_1.reverse() const data_string1 = data_1.join(",") data_2.reverse() const data_string2 = data_2.join(",") console.log(data_string1, data_string2,) this.getJsonpPosition(data_string1, data_string2) }, createpolyline(positons, viewer, color = "#ff0") { const polyline = viewer.entities.add({ polyline: { positions: Cesium.Cartesian3.fromDegreesArray(positons), clampToGround: true, width: 6, material: Cesium.Color.fromCssColorString(color), clampToGround: true } });// 视图定位到线段 viewer.flyTo(polyline) return polyline; },
总结
这个项目其实还有很多完善的地方,比如点击按钮发送请求有一段时间,应该加一个loading的动效,界面过于朴素等等。
代码我已经上传到Gitte:gitee.com/z129812/ces…
本文转载于:
https://juejin.cn/post/7177326285336051772
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
-
世界关注:人工智能(Python)教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介人工智能与Python初学者教程-通过简单易学的步骤学习人工智能从基础到高级概念,包括入门概念,...
来源: 天天简讯:记录--Cesium+Vue实战教程——地图导航
世界关注:人工智能(Python)教程_编程入门自学教程_菜鸟教程-免费教程分享
天天要闻:安卓常用shell命令大全
环球视点!无损压缩鼻祖去世了 没有他就没有今天的Zip、PNG、PDF
当前观点:博主“科普”鲸鱼会假装搁浅吸引人来救 博物杂志辟谣:九死一生
天天快讯:行驶中会“熄火” 大众召回超2万辆ID.4电动车
世界报道:欧洲玩家吐槽《霍格沃茨之遗》捏脸系统:最浅的皮肤选项依然很深
当前速看:Stochastic Methods in Finance (1)
【独家】.Net6对AOP的多种支持之IAsyncResourceFilter
世界观天下!常见的python技术难点分享
当前速讯:Nodejs原型链污染
世界要闻:[threeJS]--- 外部导入的模型如何编程式实现帧动画以及调用模型自带的动画
情人节必备:德芙香浓黑巧12元/碗大促
逃离银河系!科学家在仙女星系中发现银河移民
世界快播:山东女子中淘宝彩票锦鲤:直播1小时刮594张彩票 中7170元
天天滚动:骁龙8+满血版、残血版差价非常大 一加揭秘:能差1个亿
防止技术垄断:昆仑万维宣布将在年内开源类ChatGPT代码
【全球播资讯】陕西旅游集团旗下景区春节期间累计接待超 200 万人次,这背后也有火山引擎 VeDI 的身影
当前热门:分享5个我不能没有的Vue.js库,不信你用不上
KingbaseES libstdc++.so.6 version 'CXXABI_1.3.8'问题处理
敏捷数据科学教程_编程入门自学教程_菜鸟教程-免费教程分享
MPI库并行Fortran程序:进程通讯
微头条丨女子带汉堡进星巴克被拦 称味道大会影响其他顾客 网友抵制
微信数据再多都够用 真我GT Neo5 1TB干到3499元:旗舰射门员
新资讯:14岁女孩连续玩手机81小时险猝死 专家提醒:家长一定要控制
【环球时快讯】1TB手机不到3500元!网友评价真我GT Neo5:这让友商很难做
世界新消息丨又多了一种摸鱼手段 小红书网页版上线:左图右文 沉浸大屏
快看:Android教程_编程入门自学教程_菜鸟教程-免费教程分享
天天日报丨vue2和vue3的区别有哪些?
docker学习
【全球热闻】剑指Offer 05. 替换空格(java解题)
信息:首个教育圈ChatGPT来了!网易有道将推生成式AI:可批改作文
每日快播:创下历史第二!《霍格沃茨之遗》steam在线人数达48万
快看点丨哭笑不得!西班牙火车尺寸太大无法过隧道:白花2亿多欧元
成都现飞鸟撞树现象 网友疑灾害前兆!专家回应:想多了
环球今日报丨用ChatGPT做表格真香!只需动嘴提要求和复制粘贴
Java基础三元运算符
世界快消息!Crystal Reports 教程_编程入门自学教程_菜鸟教程-免费教程分享
新资讯:再有人问你分布式事务,把这篇文章砸过去给他
有了 ETL 数据神器 dbt,表数据秒变 NebulaGraph 中的图数据
天天播报:部分玩家批评《塞尔达传说:王国之泪》新宣传片:太中庸没新意
环球热讯:比亚迪百万新车或搭载:余承东李想力挺增程式到底落不落后?专家一句真相
C# 学习async/await(个人理解)
30 个 IDEA 常用小技巧,应有尽有,让你的撸码效率直接起飞...
【天天聚看点】世界有史以来最大百科全书!《永乐大典》首次线上公开 免费看
华擎推出4X4 BOX-7000系列迷你主机:锐龙7000U、支持双USB4
小米Civi 2宣布全版本支持MIUI 14!系统丝滑流畅、更省电
女子手机放枕边突然冒烟自燃:曾因进水维修
饭店反向抹零多收1毛被罚4500元 网友点赞:四舍五入抹零有误都可举报
天天日报丨必知必会的设计原则——里氏替换原则
焦点速递!联想发布“问天”服务器品牌 向3S领域发起总攻 5年内冲击第一
焦点!谷歌版ChatGPT灾难级发布 市值一夜狂跌7000亿 熬夜网友:退钱!
快播:刘强东要建员工福利房?京东31亿北京拿地 1.6万元/平
当前快报:手工扯面+秘制辣油 西安饭庄油泼biangbiang面6.6元/盒大促
全球看点:任天堂港服“任亏券”开卖:《塞尔达传说:王国之泪》预售你买没
孔雀石的主要成分是什么?孔雀石的作用与好处有哪些?
空气能热水器的优缺点是什么?空气能热水器十大名牌排名
高一选科怎么选最好?高一期中考试总结范文
暑假带孩子去哪里旅游最好?我的快乐暑假作文模板
旅游高峰期相反的叫什么?旅游高峰期是哪几个月?
植物大战僵尸2闪退是怎么回事?植物大战僵尸2闪退解决办法
精彩看点:【学习笔记】Http请求方法总结
当前通讯!FCoE简单介绍
头条焦点:git在工作中如何使用?
热议:近期做的有意思的两道题,不知道是谁抄谁hhhhh
Java利用ChromeDriver插件网页截图(Wondows版+Linux版)
煲音箱与不煲的差别大吗?煲音箱音量开多大合适?
验证码总是错误是怎么回事?验证码总是错误怎么解决?
电脑屏幕尺子怎么打开?电脑屏幕尺子怎么使用?
技嘉主板怎么设置U盘启动?技嘉主板超频怎么设置?
热门看点:价格率先步入“次世代”:《塞尔达传说:王国之泪》涨至70美元
环球最资讯丨《王者荣耀》项羽、虞姬情人节皮肤来了:280元值吗?
当前关注:荣耀Magic5系列充电规格曝光:全系仅66W快充
环球热文:威马汽车CDO:特斯拉单车净利润是大众十倍 随时都能大降价
热资讯!次日达 冷酸灵泵式牙膏11.9元 清新口气、抗敏感
区块链安全前传之从Web3.0到创造自己的数字货币
天天快资讯:“采访”ChatGPT看看它对我们GreatSQL社区有什么看法
关于小程序变现方式你还知道哪些?
焦点热文:开发过程中安装的依赖包
每日热议!Spring源码第一章:创建简单的 Bean 容器
买房不如买车、50万交利息税等:年轻人为什么越来越反感专家?
【新要闻】集成ChatGPT威力惊人:微软Bing下载量激增10倍
环球热门:QLC便宜即是王道 1728个SSD组成106PB超大硬盘阵列
环球速看:又有巨头扛不住了!迪士尼宣布裁员7000人:省了55亿成本
日本耗资万亿的国产大飞机失败内幕:重大安全缺陷 美国拒绝发证
当前动态:《三国演义》“关羽”陆树铭去世百天 妻子晒全家福:网友感叹
要涨价!《塞尔达传说:王国之泪》新实机出炉:能造汽车、飞机了
每日消息!趋势难挡!美国、法国等公司推行每周4天工作制:不减薪 提升幸福度
天天即时看!比ChatGPT差很多 谷歌Bard AI丢人了:回答错误致股价大跌
读Java实战(第二版)笔记05_Collection API的增强功能
谷歌首公布Android 14:续航、流畅度激增、对折叠屏更好支持!
全球快播:Linux-ansible
天天视点!Python教程:selenium模块用法教程
世界报道:带你体验下来自人工智能ChatGPT的魅力
【全球热闻】小白也能做应用(一)之fusion app介绍
高层次综合器(Vivado HLS)的设计流程[原创www.cnblogs.com/helesheng]
变天了!x86 PC陨落:ARM大暴走
高通憋出新大招:4G杀手来了
国美电器多个破产申请被驳回 苏泊尔在列
当前关注:脸都不要了!《黑棉花:悟能》无耻碰瓷《黑神话:悟空》