CesiumJS第2篇,使用Cesium加载规定区域,实现高亮效果

            <div id="content_views" class="htmledit_views">
                <h4><a name="t0"></a><span style="color:#0d0016;">前言</span></h4> 
我们都知道Cesium 是一个强大的开源 JavaScript 库,用于在网页上创建交互式的3D地球和2D地图。它支持多种数据格式和来源,允许开发者加载各种类型的空间信息,包括影像、地形、矢量数据等。上期我们介绍了,如何在项目中使用Cesium,
CesiumJS第1篇,CesiumJS使用详细,在vue中使用Cesium.js(WebGIS中的Cesium地图可视化应用)icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_65793170/article/details/131204332?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172041906316800227477971%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=172041906316800227477971&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-131204332-null-null.nonecase&utm_term=cesium&spm=1018.2226.3001.4450这次我们来记录下,如何将Cesium在本地运行,并加载规定区域高亮效果。在本地运行后,我们引用和查看Cesium的文件和API,会更加方便。


Cesium ~ 第 2 篇    ——    Cesium加载规定区域,实现高亮

一. 首先,想要实现这种效果,我们需要获取Cesium源码,这样可以方便我们查看相关文档。可以直接在Cesium官网,获取Cesium的源码文件,或者在GItHub上,克隆、下载源码压缩包,来获取项目代码文件。
1. Cesium官网上,获取源码

官网源码icon-default.png?t=N7T8https://cesium.com/downloads/

2. GitHub上,获取源码。Cesium在GitHub上的开源网址,克隆或者直接下载项目压缩包

GitHub开源地址icon-default.png?t=N7T8https://github.com/CesiumGS/cesium


二. 下载完成后,解压,打开项目文件,使用Live Server本地服务,打开主目录下的index.html文件,可以看到以下页面(Live Server是Vscode中的插件)

1. 直接翻译成中文,一目了然

2. 无法翻译成中文的,页面无法翻译的,可以查看以下

谷歌浏览器无法翻译成中文1icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_65793170/article/details/127202311?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171532628316800186579020%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171532628316800186579020&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-127202311-null-null.nonecase&utm_term=%E6%97%A0%E6%B3%95%E7%BF%BB%E8%AF%91&spm=1018.2226.3001.4450谷歌浏览器无法翻译成中文2icon-default.png?t=N7T8https://blog.youkuaiyun.com/weixin_65793170/article/details/131368398?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171532628316800186579020%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171532628316800186579020&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-131368398-null-null.nonecase&utm_term=%E6%97%A0%E6%B3%95%E7%BF%BB%E8%AF%91&spm=1018.2226.3001.4450


 三. 如果想要在Ceiusm上标注出某区域的高亮效果,这里需要用到geojson数据,就是一些数据点位。可以直接在这里获取,或者同上,在Github中,克隆或者直接下载压缩包。
1. 中国和南京区域的geojson数据

中国和南京区域icon-default.png?t=N7T8https://download.youkuaiyun.com/download/weixin_65793170/89524566?spm=1001.2014.3001.5503

2. 中国其它城市区域的geojson数据

中国其它城市区域icon-default.png?t=N7T8https://download.youkuaiyun.com/download/weixin_65793170/89524579?spm=1001.2014.3001.5503

3. 国际区域的geojson数据(这里面的中国区域,没有台湾省,必须加上,在上面其它城市区域的geojson数据中查找并添加)

国际区域icon-default.png?t=N7T8https://download.youkuaiyun.com/download/weixin_65793170/89524582?spm=1001.2014.3001.5503

4. 这里要获取资源可能需要钞能力,可以去GitHub上获取源码

中国区域icon-default.png?t=N7T8https://github.com/yezongyang/china-geojson国际区域icon-default.png?t=N7T8https://github.com/datasets/geo-boundaries-world-110m


四. 这里还要用到,天地图中的中文标记服务,也就是国家地理信息服务平台。因此需要注册并获取天地图中的Token。
1. 天地图,国家地理信息服务平台官网

国家地理信息公共服务平台(天地图)icon-default.png?t=N7T8https://www.tianditu.gov.cn/

2. 获取天地图Token,也就是Key

具体位置:首页 > 开发资源 > 控制台 > 创建新应用 

3. 如果没有中文标记服务,就会像下面这样,没有中文标记


五. 具体的逻辑函数代码,因为是用原生JS和HTML实现的,所以跟上篇文章一样,需要将关于Cesium的JS和CSS文件引入到HTML(这里的引用文件都是从上面的项目文件中复制过来的):

 
  1. <meta charset="UTF-8" />
  2. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  3. <title>Document </title>
  4. <!-- 引入cesium的js文件 -->
  5. <script src="../libs/Cesium/Cesium.js"> </script>
  6. <!-- 引入cesium的css文件 -->
  7. <link
  8. rel= "stylesheet"
  9. href= "../libs/Cesium/Widgets/widgets.css"
  10. rel= "stylesheet"
  11. />
引入完成后,大致分为4步:
1. 初始化Cesium

 
  1. //⭐初始化Cesium,设置cesium的Token和基本配置
  2. Cesium. Ion. defaultAcceToken = "Your_Token";
  3. // 创建cesium实例,控件的显示与隐藏
  4. const viewer = new Cesium. Viewer( "cesium_map", {
  5. animation: false, // 是否显示动画控件
  6. baseLayerPicker: true, // 是否显示图层选择控件
  7. vrButton: false, // 是否显示VR控件
  8. geocoder: false, // 是否显示地名查找控件
  9. timeline: false, // 是否显示时间线控件
  10. sceneModePicker: false, // 是否显示投影方式控件
  11. navigationHelpButton: false, // 是否显示帮助信息控件
  12. // 帮助按钮,初始化的时候是否展开
  13. navigationInstructionsInitiallyVisible: false,
  14. infoBox: false, // 是否显示点击要素之后显示的信息
  15. fullscreenButton: true, // 是否显示全屏按钮
  16. selectionIndicator: false, // 是否显示选中指示框
  17. homeButton: true, // 是否显示返回主视角控件
  18. // 如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
  19. scene3DOnly: true,
  20. });});
  21. // 去掉logo
  22. viewer. cesiumWidget. creditContainer. style. display = "none";

2. 配置天地图中文服务

 
  1. // 天地图结合Cesium的中文标注图层
  2. viewer. imageryLayers. addImageryProvider(
  3. new Cesium. WebMapTileServiceImageryProvider({
  4. url: "http://t0.tianditu.gov.cn/cva_w/wmts?tk= Your_Key ",
  5. layer: "cva",
  6. style: "default",
  7. format: "tiles",
  8. tileMatrixSetID: "w",
  9. maximumLevel: 18,
  10. credit: new Cesium. Credit( "天地图全球影像中文注记服务"),
  11. })
  12. ););

3. 加载目标区域GeoJSON 数据,实现目标区域高亮

 
  1. // ⭐加载中国区域 GeoJSON 数据
  2. const chinaGeoJsonData = "../assets/geojson/chinaAll.geojson";
  3. const chinaDataSourcePromise = Cesium. GeoJsonDataSource. load(
  4. chinaGeoJsonData
  5. )
  6. . then( function ( chinaDataSource) {
  7. viewer. dataSources. add(chinaDataSource);
  8. viewer. zoomTo(chinaDataSource);
  9. // 遍历中国全图 GeoJSON 数据的实体并设置样式
  10. const chinaEntities = chinaDataSource. entities. values;
  11. for ( let i = 0; i < chinaEntities. length; i++) {
  12. const entity = chinaEntities[i];
  13. if (entity. polygon) {
  14. // 设置填充颜色为红色,透明度为0.5
  15. entity. polygon. material = Cesium. Color. RED. withAlpha( 0.5);
  16. entity. polygon. outline = true;
  17. // 设置轮廓颜色为黄色
  18. entity. polygon. outlineColor = Cesium. Color. YELLOW;
  19. }
  20. }
  21. return chinaDataSource;
  22. })
  23. . catch( function ( error) {
  24. console. error( "加载中国全图 GeoJSON 数据出错:", error);
  25. });});
  26. // ⭐加载南京区域 GeoJSON 数据
  27. const nanjingGeoJsonData = "../assets/geojson/nanjing.geojson";
  28. const nanjingDataSourcePromise = Cesium. GeoJsonDataSource. load(
  29. nanjingGeoJsonData
  30. )
  31. . then( function ( nanjingDataSource) {
  32. viewer. dataSources. add(nanjingDataSource);
  33. // 遍历南京市 GeoJSON 数据的实体并设置样式
  34. const nanjingEntities = nanjingDataSource. entities. values;
  35. for ( let i = 0; i < nanjingEntities. length; i++) {
  36. const entity = nanjingEntities[i];
  37. if (entity. polygon) {
  38. // 设置填充颜色为紫色,透明度为0.5
  39. entity. polygon. material = Cesium. Color. PLUM. withAlpha( 0.5);
  40. entity. polygon. outline = true;
  41. // 设置轮廓颜色为黄色
  42. entity. polygon. outlineColor = Cesium. Color. YELLOW;
  43. }
  44. }
  45. return nanjingDataSource;
  46. })
  47. . catch( function ( error) {
  48. console. error( "加载南京市 GeoJSON 数据出错:", error);
  49. });});

4. 设置初始视角和过渡动画时间

 
  1. // ⭐默认中国区域视角
  2. viewer. camera. flyTo({
  3. // 使用经纬度设置视图矩形范围
  4. destination: Cesium. Rectangle. fromDegrees( 73.66, 18.16, 135.05, 53.55),
  5. // 飞行持续时间(秒)
  6. duration: 5,
  7. });});

5. 这是目录


六. 实现效果(因为文件大小有限制,所以清晰度不高)

创作不易,感觉有用,就一键三连😄点赞、收藏加关注,感谢(●'◡'●)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值