gis可视化的方法_gis可视化分析

gis可视化的方法_gis可视化分析前言从去年开始无脑接触Cesium三维GIS可视化,入坑之后一直到到现在,其实已经写了多个项目了,中间也遇到了很多坑点,很早就想分享其中所获了,只是觉得不太专业而且没有太多时间,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

gis可视化的方法_gis可视化分析

从去年开始无脑接触 Cesium 三维 GIS 可视化,入坑之后一直到到现在,其实已经写了多个项目了,中间也遇到了很多坑点,很早就想分享其中所获了,只是觉得不太专业而且没有太多时间,拖到现在,从开始接触 Cesium ,加了一个QQ交流群,从刚开始的 200 人,到现在的 3000 人,好像使用 Cesium 做可视化方向的人越来越多了,并且其中很多人都是如我一样,从前端半路入坑

记得好像是公众号「Cesium中文网」曾发过一篇文章名叫「Cesium只剩可视化了吗」个人觉得写的很棒,虽然 Cesium 不止是可以做可视化这么简单,但是目前大部分选择投入其中的人是奔着可视化这个方向的,这点从 300 到 3000 足以证明

个人写作习惯篇幅很长,文章产出总是很慢,之所以还想要写这个系列的文章,大概有三点

  • Cesium 毕竟是一个世界级 JavaScript 开源产品,做 CS 还好,但是做 BS,特别是可视化产品是需要扎实的前端基础的,相比较下专业的 GIS 对前端一些框架了解好像不太多,并不能很好的把自己丰富的 GIS 知识或者说一些很强大的功能在前端炫酷的展现出来,毕竟功能再强大,不经过雕琢和装饰总归还是不能被人推崇的

  • 近两年前端同学半路入坑 Cesium 的人太多了,但是由于没有扎实的 GIS 基础,涉及深入一点的 GIS 核心的效果实现并不容易,一路上的磕磕绊绊实在是太多了,这个是亲身经历,且十分惨痛

  • 关于 Cesium,一直是自己在摸索,项目也写不少了,但是肯定有很多地方在更为专业的人看来是闹着玩一样,所以水水文章看看进自己脑子的知识有哪些是炸弹,回顾一遍排排雷,查漏补缺

其实我个人对 CS 方面完全没有经验,BS 做可视化有些项目经验,但是说实话,只懂皮毛,不过在前进的道路上爬了太多的坑,所以可以与大家分享些爬坑经验,也充实下自己,涉入 GIS 不会很深,不过一般的还是可以的,算带大家入入门吧,也希望可以和大家一起查漏补缺,正所谓山中无老虎,猴子称大王,没错,我就是那只猴子,谁让现在Cesium相关的技术帖辣么少呢

写的帖子目前想法是除了入门之外会更倾向于各种好玩炫酷的效果制作,所以它也会更倾向于实战系列,你也可以把它当作入门级教程,这个系列我尽量每文简短些,控制在5000字内,让大家看着舒服 ????

「PS:」

  • 「CS」Client/Server,客户端/服务器模式,桌面级应用,响应速度快,安全性强,个性化能力强,响应数据较快,兼容性差,不跨平台,开发成本高

  • 「BS」Browser/Server,浏览器/服务器模式,Web应用,可以实现跨平台,客户端零维护,共享性强,但是个性化能力稍低,响应速度稍慢

得瑟一下

看到这篇文章时,可能大家对 Cesium 有所了解,也可能一无所知,甚至不知道它能干什么,先给大家看一个我这边刚入坑时做的第一个基于 Cesium 的可视化产品,现在看其实挺一般的,不过当时刚做出来时确实是挺开心挺有成就感的,也让大家对 Cesium 加深下了解,当然这个项目中只是简单的运用了 Cesium,它远不止于此

那么接下来话不多说,赶紧来认识下 Cesium 吧

Cesium简介

什么是Cesium

Cesium 是一款面向三维地球和地图的,世界级的 JavaScript 开源产品,它提供了基于 JavaScript 语言的开发包,方便用户快速搭建一款零插件的虚拟地球 Web 应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证

Cesium是基于 Apache2.0 许可的开源程序,它可以免费的用于商业和非商业用途,它隶属于 AGI(Analytical Graphics Incorporation)公司,三位创始人曾在通用公司宇航部的供职工程师,提供 STK(System/Satellite Toolkit Kit)和 Cesium两款产品,该公司是航天分析软件的领导者,而 STK 则是该公司的旗舰产品,比如 马航MH370 搜救过程就采用了 STK 软件,经过多年来在时空数据的积累,AGI 公司逐渐掌握了大量 3D 可视化技术,也感受到各行各业对海量 3D 数据的强烈需求,因此于2011年创建了 CesiumJS 开源项目,围绕 Cesium 生态圈打造了一套安全可靠易扩展且平台独立的企业级解决方案

而 Chrome 也是在2011年2月份推出了支持 WebGL 的第一个版本,在这点上,Cesium算是第一个敢吃螃蟹的人,Cesium 原意是化学元素铯,铯是制造原子钟的关键元素,通过命名强调了 Cesium 产品专注于基于时空数据的实时可视化应用

至今,CesiumJS 的下载量超过 1,000,000,是一个为数百万用户提供了强大的应用程序

作为前端程序员,只是单纯做可视化,其实在我看来, Cesium 与 Leaflet 以及 OpenLayer 等没有本质的区别,只是Cesium支持三维场景等等,做的更漂亮

Cesium可以做什么

支持全球级别的高精度的地形和影像服务

支持 2D、2.5D、3D 形式的地图展示,真正的二三维一体化

支持矢量、海量模型数据(倾斜,BIM,点云等)

支持基于时间轴的动态数据可视化展示

Cesium的浏览器兼容性

学习和使用 Cesium 前,首先要检查一下你的浏览器是否支持 WebGL,目前,大多数平台和浏览器都支持WebGL,在这些环境下运行 Cesium 并没有太大的问题,但效果和性能是否能够满足不同的需求,就需要考虑很多细节和额外因素

大多数平台和浏览器都支持 WebGL1.0 标准,也就是 OpenGL ES2.0 规范,2017年年初,Chrome 新版本低调的支持 WebGL2.0,随着各硬件厂商 GPU 性能的提升和 WebGL2.0 规范的成熟,WebGL 技术会有更大的提升潜力,不过无论是 PC 还是移动端,Chrome 都是 WebGL 开发和应用的最佳平台,所以,如果没有特殊的硬性要求,建议大家使用 Chrome 学习和开发 Cesium

你可以在浏览器中访问 WebGL Report 来查看你的浏览器支持情况

gis可视化的方法_gis可视化分析

如上图红框中显示,这个浏览器支持 WebGL 1,你也可以点击 WebGL 2 查看自己的浏览器支持情况

清单中除了显示了你的浏览器是否支持 WebGL 标准,还有很多,比如

  • 是否支持深度纹理

  • 顶点着色器的最大属性数

  • 是否支持ANGLE 扩展

  • 等等

一个HelloWorld程序

其实上面的都是废话,但是你又必须要知道,其实对我们写程序是没有一点帮助的,只是提供数据为了给大家了解下 Cesium 的强大

有的人可能认为学习 Cesium 之前应该学习学习 GIS 基础架构、坐标系、投影、存储类型等等等等,其实我觉得如果你有这些常识,那自然是极好的,但是如果没这些知识储备,在刚开始学习 Cesium 的时候,学习这些乱七八糟的,完全没必要

因为这些基础知识学起来很容易打磨积极性,还不如先写几个 demo 程序来的实在,毕竟总得先体会下它的魅力,就像你走在路上,你看到前面有个坑,那肯定会绕过去,但是如果坑上有些草,还有些漂亮的花,那就不一样了

SO,我们先搞个地球出来,后面哪里有需要再穿插说一些常识

编译器选择

实力推荐 VS Code 一把梭,当然实在用不习惯其他编译器也都行,看个人习惯,实力强用记事本都没得关系

下载Cesium包

首先,我们要下载 Cesium 包,官网下载即可,Cesium 每个月都会更新一个版本,一直在迭代,这点就足以证明它的活跃性以及未来,地址如下 ????

下载下来解压后你会发现有很多文件,如下图

gis可视化的方法_gis可视化分析

我们下载这个包里包括 Cesium API 源代码 Source 文件夹,以及编译后的 Build 文件夹,还有Demo、API文档、沙盒等等,这些都不用管

我们只需要 Build 文件夹下面的 Cesium 这个文件夹,它是编译后 Cesium 包的正式版本,开发的话只需要这个就完了

初始化地球

首先,我们找地方新建一个目录,这里目录名为 demo ,我们把上面说的 Cesium 这个文件夹拖进来

接着,我们在 demo 目录下新建一个 index.html 文件,初始化一个地球,只需四步

「No.1」 引入 cesium.js,该文件定义了 Cesium 对象,它包含了我们需要的一切

<script src="./Cesium/Cesium.js"></script>

「No.2」 引入 widgets.css,为了能使用Cesium 各个可视化控件

@import url(./Cesium/Widgets/widgets.css)

「No.3」HTMLbody 中我们创建一个 div,用来作为三维地球的容器

<div id="cesiumContainer"></div>

「No.4」 在 JS 中初始化 CesiumViewer 实例

let viewer = new Cesium.Viewer('cesiumContainer')

完整代码如下

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="./Cesium/Cesium.js"></script>
    <style>
      @import url(./Cesium/Widgets/widgets.css);
      html,body,#cesiumContainer {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
      }
</style>
  </head>
  <body>
    <div id="cesiumContainer"></div>
    <script>
      window.onload = function () {
        let viewer = new Cesium.Viewer("cesiumContainer")
      }
</script>
  </body>
</html>


运行环境

平常我们写一个页面,浏览器打开 html 文件即可,在写 Cesium 程序的时候,不要本地双击浏览器运行,因为在实际工作中,它是需要运行在Web服务器上的

这里我们使用Node来搭建这个服务,首先你要在电脑装Node,这个不过多赘述,不了解自行百度安装即可

官网包括一般的教程里这个时候就要手写代码用 express 或者 Koa 简单的搭一个Web服务了,但是这也是没有必要的,这里我们只是写个 demo,没必要再去写后端代码什么的,太麻烦,我们装一个 live-server 就行了

live-server 是一个具有实时加载功能的小型服务器,简单说,你装了它,直接在当前目录命令行运行命令这个服务就起来了

安装 live-server 命令如下

npm install -g live-server

再次强调,这只是一个小 demo,一般来说正常项目开发中 Vue+Cesium 我觉得是最佳实践了,而使用 Vue 来开发的话  Vue-CLI 本身就是一个本地服务,我们如果要原生开发的话 live-server 就行了,虽然写个Web服务不难,但终归是浪费时间

当我们 Node 安装好了,也装上了 live-server 后,我们在终端  cd 到项目根目录下 ,执行下面命令

live-server

默认启动的是8080端口,如下图

gis可视化的方法_gis可视化分析

紧接着,直接在浏览器输入 http://127.0.0.1:8080 ,你的第一个 Cesium 程序就 ???? 了

gis可视化的方法_gis可视化分析

如上所示,页面上就会呈现一个 3D 的地球了,是不是很简单,有没有勾起你入手的欲望呢?

这次就到这里,下次我们来说一说 Vue 里面使用 Cesium 开发以及一些注意事项,一步一步来,心急吃不了热豆腐,每篇文末会给大家列出我一些相关的学习地址

最后

初识 Cesium 一定要知道的几个网站

如果是刚接触Cesium,这些网站无论如何都要点进去看一看,先简单过一遍即可,后期会用上的

文章收录在GitHub,更多精彩请看  github.com/isboyjc/blog

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188474.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • ftp 命令详解_ftp连接命令

    ftp 命令详解_ftp连接命令1、ftp&gt;!从ftp子系统退出到外壳2、ftp&gt;?显示ftp命令说明,与help相同格式:?[command]说明:[command]指定需要帮助的命令名称,如果没有指定command,ftp将显示全部命令的列表3、ftp&gt;append使用当前文件类型设置,将本地文件附加到远程计算机的文件格式:appendlocal-file[remote…

  • idea常用快捷键分享|IntelliJ IDEA快捷键分享

    idea常用快捷键分享|IntelliJ IDEA快捷键分享前言idea工具确实好用,从eclipse到idea,永无回头路,从破解到开源license,无法逃脱真想定律。现在列举出如下快捷键,让你在idea中如鱼得水。一、Ctrl快捷键Ctrl+F在当前文件进行文本查找(必备)Ctrl+R在当前文件进行文本替换(必备)Ctrl+Z撤销(必备) Ctrl+Y删除光标所在行或删除选中的行(必备)Ctrl+X剪切光标所在行或剪切选择内容Ctrl+C复制光标所在行

  • redis分布式锁的应用场景有哪些_redis setnx 分布式锁

    redis分布式锁的应用场景有哪些_redis setnx 分布式锁“分布式锁”是用来解决分布式应用中“并发冲突”的一种常用手段,实现方式一般有基于zookeeper及基于redis二种。具体到业务场景中,我们要考虑二种情况:一、抢不到锁的请求,允许丢弃(即:忽略)比如:一些不是很重要的场景,比如“监控数据持续上报”,某一篇文章的“已读/未读”标识位更新,对于同一个id,如果并发的请求同时到达,只要有一个请求处理成功,就算成功。用活动图表示如下:二、并发请求,不论哪一条都必须要处理的场景(即:不允许丢数据)比如:一个订单,客户正在前台修改地址,管理员在后台同时修

  • python递归写法_python递归怎么写

    python递归写法_python递归怎么写1、递归的百度百科定义程序调用自身的编程技巧称为递归(recursion)。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般…

  • 常见开源分布式存储系统

    常见开源分布式存储系统系统整体对比对比说明/文件系统TFSFastDFSMogileFSMooseFSGlusterFSCeph开发语言C++CPerlCCC++开源协议GPLV2GPL

  • 5G NR SSB概述[通俗易懂]

    5G NR SSB概述[通俗易懂]       SSB(SynchronizationSignal/PBCH,同步广播块)是5G中使用的最重要的导频信道之一,其作用关系到UE接入小区的很多方面,如小区搜索、波束测量、波束选择、波束恢复等。1、SSB时频域结构       在5G中,SSB包括同步信号和广播信号,具体同步信号包括PSS(PrimarySynchronizationSignal,

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号