原生Cesium加载超图S3M服务
适用场景:通常情况下,加载S3M数据需要使用超图的SuperMap iClient3D for WebGL库。
但在某些项目中,我们可能已经构建了基于原生Cesium的应用框架,不希望引入过多依赖。这时,实现原生Cesium加载S3M就变得很有价值。
关键代码:12345678import "@/components/SuperMap3D/SuperMap3D.js";//获取viewer对象const { viewer } = window;let scenes = "https://www.supermapol.com/realspace/services/3D-CBD/rest/realspace";viewer.scene.open(scenes);
💡 SuperMap3D.js文件中的SUPERMAP_BASE_URL需要配置成上面静态资源的实际请求路径
效果展示
参考文章:https://mp.weixin.qq.com/s/ZimVYQotuAcfB9tXK3FtNw —— 攻城师不浪
Cesium使用自定义Shader渲染3dtiles建筑白膜
适用场景大屏项目,有科技风格主题渲染需求的,可以对建筑白膜进行自定义渲染,实现灵活多变酷炫的风格
实现思路Cesium自1.87.1版本,开始支持3DTileset使用CustomShader:
1Added CustomShader class for styling Cesium3DTileset or ModelExperimental with custom GLSL shaders
在CesiumJS 1.97版本,支持Model entities使用CustomShader:
1Model entities now support CustomShader
借助CustomShader,我们可以轻松的实现模型的自定义Shader渲染
效果展示
关键代码12345678910111213141516171819202122232425262728//基于高度的渐变和线条扫描特效const shader = new Cesium.CustomShader({ fragmentShaderText: ` void fragmentMain ...
在vue3项目中引入Cesium的最佳实践(转载)
基础引入方式的弊端在本人以往的离线Cesium项目中,通常的做法是在下载完cesium依赖后,直接将node_modules/cesium/Build/Cesium文件夹复制到项目根目录的public路径下,这一过程依赖手动操作。如果cesium版本更新后,也要手动更新静态资源,如果忘记了这一步,通常会出现cesium渲染报错;解决这一问题让其自动化是本文的目的。
核心优化1.静态资源自动复制使用一种静态资源复制插件,实现将node_modules中的Cesium/Build/Cesium下的文件复制到public,替代我们的手动操作;
在vite.config.ts文件中增加如下配置:
123456789101112131415161718192021222324252627282930313233343536373839404142import { fileURLToPath, URL } from 'node:url'import { viteStaticCopy } ...
使用certbot申请ssl证书并实现自动续期
背景:最近本站的ssl证书又过期了需要更新,于是趁此机会研究下Certbot自动续期,实现ssl证书自动更新;
环境:操作系统:ubuntu 22.04 LTS
步骤记录:1.安装certbot(使用apt安装)使用以下命令安装
12sudo apt-get updatesudo apt-get install certbot
2.插件选择目前certbot常用的自动续期方式有两种,一种是使用certbot-nginx插件的方式,一种是使用dns服务商插件的方式;第一种方式不支持泛域名,如果需要申请支持泛域名的ssl证书的话,只能选择第二种方式;
3.nginx插件方式(不支持泛域名)3.1 安装nginx插件1sudo apt install certbot python3-certbot-nginx
打开nginx.conf,在你的站点配置中添加ACME挑战路径处理模块
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 ...
mapboxgl离线使用配置(跳过token验证)
背景很多Giser同行在学习mapboxgl开发时大概率会遇到这个问题:mapbox怎么跳过token验证?mapbox怎么离线使用?百度搜了一大堆,很多回答都不靠谱。笔者已经遇到过n多小伙伴有这样的疑惑了,于是写下这篇文章统一回复,以后再遇到有人问直接甩链接,以便为本站增加流量😏;
❌token验证报错:
解决方法:在引入mapboxgl后,添加下面这行代码:
1mapboxgl.baseApiUrl = ""
demo:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name=" ...
Git仓库添加远程仓库并切换分支映射
背景:在使用Git时,遇到了需要配置多个远程仓库的情况,此时需要为Git添加一个远程仓库配置,并设置分支映射。
操作方法:1.使用命令为本地仓库添加一个远程仓库,取名随意,这里我取名为proxyOrigin
1git remote add proxyOrigin http://your.new.rempository.git
2.拉取新远程仓库的分支
1git fetch proxyOrigin
3.设置本地分支映射到新远程仓库的对应分支(以develop分支为例)
1git branch develop -u proxyOrigin/develop
4.检查结果(非必要步骤)
1git branch -vv
从零开始的python项目-地图切片下载
背景:笔者最近决定开始学python,刚好在工作中遇到了地图切片下载的需求,于是就想用python实现一个切片下载的脚本,简化后续工作的同时也能顺便练习自己的python技能。笔者目前的进度如下图,还停留在语法层面。但是借助强大的AI老师,我完全有信心实现这个脚本!
项目搭建:经过网上查询资料和询问AI,我了解到Python项目搭建分为以下几个关键步骤:
创建项目目录
创建python虚拟环境
安装需要的依赖
编写核心逻辑代码
1.创建项目目录在一个喜欢的位置新建文件夹,用于存放python项目文件。
2.初始化python虚拟环境
什么是python虚拟环境?
虚拟环境是相对于全局环境的概念,每个项目使用的依赖都可能不一样,如果都安装在全局(也就是python的安装目录中),会造成依赖的版本混乱,所以需要每个项目都有一个独立的空间,用于存储项目的依赖,python执行时优先从项目中的依赖空间找依赖;(类似于前端项目中的node_modules目录)
创建虚拟环境有多种方式,常用的是使用Python内置的虚拟环境管理工具venv或第三方的Conda
通过询问AI老师,我了解到C ...
SSH免密登录服务器
1.什么是SSH?SSH(Secure Shell)是一种网络协议,主要用于为远程登录会话和其他网络服务提供安全的传输通道。
安全性:通过加密技术对数据传输进行加密,防止数据在传输过程中被窃取、篡改或监听。它采用非对称加密算法(如 RSA、DSA、ED25519 等)进行密钥交换和身份验证,确保只有授权用户才能访问远程系统,大大提高了网络通信的安全性。
非对称加密:非对称加密算法会生成一对密钥,即公钥(Public Key)和私钥(Private Key) 。这两个密钥在数学上相关,但不能由公钥推导出私钥,也不能由私钥推导出公钥。公钥是公开的,可以分发给任何需要与持有私钥的一方进行通信的人;而私钥则由密钥的所有者妥善保管,严格保密。
主要功能:
远程登录:允许用户从本地计算机安全地登录到远程服务器,就像在本地操作一样执行各种命令。例如,系统管理员可以在办公室通过 SSH 远程管理服务器,进行软件安装、配置调整等操作。
文件传输:支持安全的文件传输,常见的有 SCP(Secure Copy)和 SFTP(SSH File Transfer Protocol)。用户可以方便地在本 ...
了解一下计算机领域常见的编码方式
笔者作为一个非科班出身的前端工程师,对编码这一块的概念一直比较模糊,最近在做需求查资料的过程中了解到相关知识,于是决定把它记录下来;
⚠️注:以下内容为AI生成
1.什么是编码?简单解释: 编码(Encoding)是将信息从一种形式或格式转换成另一种形式的过程。通常,编码的目的是为了更有效地传输、存储、处理或理解数据。在计算机和通信领域,编码广泛应用于数据的表示、存储、加密、压缩等方面。
2.常见的编码方式常见的编码方式有很多,按用途和应用的不同,它们可以分为不同的类别。以下是几种常见的编码方式,每种编码方式有其特定的应用场景和优缺点:
1. 字符编码字符编码是将字符映射到数字(字节)的过程,常见的字符编码有:
1.1 ASCII (American Standard Code for Information Interchange)
用途:主要用于英文字符的编码。
描述:ASCII 是一种 7 位编码方式,能表示 128 个字符(包括 26 个字母、数字 0-9、常见标点符号以及一些控制字符)。
范围:0-127,包含英文字符和一些特殊符号。
优点:简单且占用空间小。
缺点:只能 ...
使用frp实现内网穿透,让外网可以访问内网服务
1.简介——什么是 frp?frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。它是由中国开发者开发的开源项目,旨在为用户提供一个简单易用的内网穿透解决方案。
通常情况下,位于内网中的服务器或设备由于路由器或防火墙的限制(或是没有公网 ip),无法直接被外部网络访问。FRP 通过设置在外网的一个中间服务器(一般称为 FRPS,即 FRP Server),可以将来自公网的请求转发到内网中的目标机器(一般称为 FRPC,即 FRP Client)上运行的服务,从而实现从外网访问内网服务的效果。
2.原理:下面的架构图展示了 frp 的运行原理,用户通过 frps 来访问暴露到公网的不同的内网服务。
简单地说,frp 就是将一个网络中(通常是内网)的端口代理到了另一个网络(通常是公网)中,打通了两个网络,实现了两个网络间的通信。
而这一通信建立在一台能同时访问两个网络服务的主机上,这台主机上的 frps 服务就是通信的桥梁。
3.使用 FR ...
调用Geoserver的WFS服务点查要素属性
背景:在GIS开发过程中,经常会遇到前端加载了geoserver的wms服务后,需要查询某个要素的属性进行弹窗显示的需求,这个时候就需要调用wfs服务查询到鼠标位置的要素属性进行操作;
关键代码:123456789101112131415161718192021222324252627282930313233343536const Your_WorkSpace = 'TEST';const Your_LayerName = 'Block';const geometryFieldKey = 'the_geom';axios.get(`http://192.168.0.81:8080/geoserver/${Your_WorkSpace}/wfs`, { params: { SERVICE: 'WFS', // 服务类型 VERSION: '1.1.0', // WFS版本 REQUEST: ' ...
Threejs平行光源阴影渲染过程记录与要点总结(多图预警)
概述:阅读完本文,你将学会如何使用 Threejs 平行光源创建阴影以及如何避免阴影渲染过程中的一些坑;
基本原理:Threejs 阴影的渲染有三个关键的条件:
Render 对象开启阴影渲染能力;
光源或阴影原物体开启阴影投射;
显示阴影的物体开启阴影接收;
渲染过程关键代码:根据上面的原理,以下代码片段演示在实际 threejs 开发中如何进行配置
123456789101112131415161718192021222324252627282930313233//1.创建rendererconst renderer: THREE.WebGLRenderer = new THREE.WebGLRenderer({ antialias: true,})renderer.shadowMap.enabled = true //开启阴影renderer.shadowMap.type = THREE.VSMShadowMap //设置阴影类型//2.创建平行光源和光源辅助工具const light = new THREE.DirectionalLight(0xfff ...