自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wenyeqv的博客

GIS行业从业者,从事webgis、opengl、模型轻量化等方向,欢迎交流学习

  • 博客(88)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java调用GDAL实现postgresql数据生成shp和dxf

由于shp数据存储到postgresql数据库中,前端调用数据库实现数据的渲染,最近有一个新的需求,前端圈选数据,实现数据的下载,数据可以是shp、dxf、excel格式,这里主要记录在后端通过调用gdal来实现这个需求

2024-04-29 14:49:25 572

原创 基于苹果手机采集数据实现RGBD三维重建

项目使用tsdf的方式进行三维重建,借助open3D实现可视化和模型生成,其首先根据置信度将深度图进行筛选,小于限定置信度的深度值设置为0,其次将视频处理成rgb帧,融合深度图里,借助相机内参和姿态进行三维重建。

2024-04-22 14:53:50 684

原创 基于kml线路生成路线规划文档

在野外工程采集中,一线工作人员为了记录所在方位与坐标,一般会对相关点做标记,最终导出成一个kml格式的文件,该文件记录了一系列工程点和路线,很多工程报告需要根据这些线路来对周边环境进行描述,如高压线路的铺设,野外测绘等,比较严谨的方案是结合最新的影像地图以及其它实测数据和规划数据,由相关人员进行撰写,最近在研究自动化的过程,手里的数据比较少,因此仅仅实现一个思路。一个测量点也可以被看作一个拐点,即线路走到这里会发生改变,因此需要找到附近的地物点及方向,以便加以描述。目的是将kml读取成可以解析的坐标。

2024-03-21 14:23:49 425

原创 模型单体化的顶点精简和空洞修复

针对上述问题,考虑对边缘的格网进行切割处理,使在模型内的部分保留,不在模型内的部分舍弃,由此可以推断,这种方式格网至少会和多边形边缘产生2个交点,由于2个以上交点的情况太过复杂,这里只针对普遍的两个交点的情况进行分析。由于分割点分布在模型的边缘,因此想要构建模型的四周墙面,需要利用分割点和建筑底部点,由于底部点不清晰,因此可以借助多边形的点,由于多边形在xy平面内,将该多边形沿Z轴平移到模型最底部,即可成为模型底部的范围点。这样导致的问题就是,处于分割边缘的三角格网,可能不会包含进来;

2024-02-29 14:16:15 307

原创 基于shp数据实现obj模型的切割(模型单体化思路)

由于obj模型包含顶点和纹理,而shp数据基本处于二维平面,那么需要考虑顶点落在shp面数据xy平面内的数据,同时,一个面最少由三个顶点构成,如果一个面的部分在shp范围内,部分在范围外,则需要重新分割,生成新的顶点并构建网格。由于每个材质对应了一部分三角格网数据,格网数据对应了相应的顶点和纹理坐标数据,因此在解析数据的时候以材质进行分类,先记录每个材质的相关信息,在根据材质读取对应的顶点坐标和纹理坐标,进行裁剪和划分。通常简单的obj数据包含顶点信息,纹理信息,面信息,有的obj还包含一个mtl文件。

2024-02-19 15:40:31 1045

原创 arcEngine修改字段标注

在arcEngine中,有时候需要修改图层要素的标注值,而且每个字段值对应了要修改的内容,如字段值”1“替换成”A“,字段值”2“替换成”B“等,这就需要在替换的图层中,遍历每个要素,查到每个要素的原有标签值是多少,然后再根据标签值修改。实际上,这是在一个新的文件里建立了一个字典,字典里面编辑了原有标签和新标签的对应关系,至于为什么是要新建一个独立的文件,是因为后期好维护,要修改字典的话只需要在这个文件里进行编辑就行,不涉及其它逻辑代码,加上任意问价都可以引入调用。拿到原来标签的内容后,调用了一个。

2023-12-20 14:41:15 467

原创 指定要素高亮

arcEngine开发中,经常面临一个情况,就是查询到一个要素或指定一个要素的id,去让这个要素高亮,其实实现这个功能很简单,只不过基于arcEngine二次开发,需要熟悉它的官方文档才能找到这个方法,这里简单记录一下。

2023-12-18 09:23:23 404

原创 2.C程序和GCC编译器

退出保存之后,执行gcc hello.c 即可得到一个a.out文件,这是一个二进制可执行程序,将当前所写代码经过翻译得到计算器能够理解的代码,这个过程叫编译,过程所用到的工具叫编译器。

2023-07-24 14:25:43 120

原创 1.linux操作系统和文件系统

linux和vim基本命令

2023-07-21 17:16:33 104

原创 Cesium加载矢量数据探索——从geojson到矢量切片

通常来说,对于简单的shp数据,最常规的处理方式是通过geojson格式在cesium中进行加载,而cesium也为加载geojson及后续操作提供了丰富的api。

2023-02-27 23:43:25 1290 1

原创 说一下vue响应式原理?可不只有proxy

凭借着之前的学习积累,用自己的方式叙述一下自己所学的知识点,笔者高中讨厌写作文,硕士期间不喜写论文,水平肯定有限,能详述之前所学的知识已是不易,若能给读者带来一点启发,将倍感荣幸,同时也虚心接受大佬、同仁指点。

2022-10-28 19:32:02 346

原创 Vue3中setup函数的作用与实现

Vue3中setup函数作为一种新的组件属性,可以将数据逻辑划分的更加清晰,其实现原理也很简单。

2022-09-19 19:29:19 2489

原创 vue3组件渲染的调度

【代码】vue3组件渲染的调度。

2022-09-19 16:57:26 373

原创 11. Vue3组件的更新渲染逻辑

【代码】11. Vue3组件的更新渲染逻辑。

2022-08-20 15:23:56 1085

原创 Vue3中diff算法比对新老节点孩子数组

Vue3中diff算法比对新老节点孩子数组。

2022-08-18 15:14:08 406

原创 9. Vue3中如何将虚拟节点渲染成真实节点

返回一个render函数,该函数接收两个参数,分别是虚拟节点vnode,和容器container,改函数在节点更新删除都可以使用,因为都要将虚拟节点渲染成新节点,因为只需要比对传入的新的虚拟节点和原来的旧的虚拟节点,就可以判断出是更新节点还是删除节点。processElement函数中,对vnode进行判断,若为null,说明不存在旧节点,则直接根据新的vnode创建真实节点。函数接收一个dom操作对象,在函数内部会对改对象解构,获取各种dom和属性操作方法。在render函数内部,判断vnode。...

2022-08-02 11:04:39 1434

原创 8.Vue3虚拟节点的实现

vue3中节点的渲染操作主要在runtime-core包中,runtime-core不关心运行的平台。

2022-07-31 09:46:06 1474

原创 7.vue3渲染模块的domAapi实现

vue3中渲染模块有两个子模块,分别是runtime-dom和runtime-core,其中,runtime-dom模块提供了常用的节点操作api和属性操作的api,而runtime-core中则包含虚拟dom的创建,diff算法等。本节来完善runtime-dom中的domapi,以便后面供runtime-core模块使用。通过vue3中的runtime-core可以实现自己的渲染逻辑。...

2022-07-17 16:27:44 437

原创 6.vue3中ref的实现原理

Vue3中的ref可以使单个属性拥有响应式,其本质就是一层包装,实现原理和computed类似。

2022-06-21 20:25:33 2045

原创 5.watch方法的实现

Vue3watch函数的实现

2022-06-20 12:46:17 593

原创 4.Vue3计算属性computed实现原理

computed为Vue3中的计算属性函数,其实现原理就是effect的变形

2022-06-19 21:00:16 1993

原创 Vue3中数据更新函数effect的实现

VUe3中effect函数的实现

2022-06-15 22:37:13 1633

原创 2.Vue3中数据绑定的实现

Vue3数据绑定从defineProperty改为Proxy,并且每一个功能抽离成一个模块,这里介绍源码中数据绑定的流程实现

2022-06-07 11:10:33 2613

原创 1.Vue3环境搭建

Vue3源码打包流程

2022-06-02 22:34:27 610

原创 node中base64的转换规则

base64转换规则base64可以编码任何东西,其基于二进制,方便传输,我们可以尝试编译一段文字输入无敌且英俊node中汉字占3个字节,一个字节有8位,我们需要将函子转为二进制,只需要利用BUffer转为16进制再转为2进制即可可以判断,五个汉字转为二进制一共120位由于base64规定,每个字节不能超过64,我们可以推测出,一个字节8位的话有2**8 = 256,所以我们要重新分配每个字节的内容,使之不能超过64由 15*8 -> 20 * 6如: 11100111 10

2022-05-26 10:36:57 851

原创 node中events模块简单实现

node中events模块的简单实现node中events模块是一个发布订阅类events的应用简单的发布订阅 const EventEmitter = require("events") const { grep } = require("jquery") const girl = new EventEmitter() //订阅 girl.on('失恋了',function(boy){ console.log('哭',boy)

2022-05-25 11:03:47 359

原创 模拟node中require加载机制实现

node中require加载机制node中的模块加载规范为commonJS规范,规范中通过require来引入模块。require源码探究暴漏出一个text模块 let str = 'hello world' module.exports = strnode中的源码无法通过打断点进行调试,这里借助vscode,在debug模式中,新建launch.js文件,并且将"skipFiles"内容 清空,表示不跳过node核心代码,然后在require处打断点,即可进入require内部源码

2022-05-23 20:02:10 149

原创 浏览器事件环及相关习题

浏览器事件环进程与线程计算机分配任务是以进程来分配,进程中包含着线程浏览器是一个进程,而且是一个多进程模型(多进程好处就是一个进程挂掉不会影响其它进程)一个tab就是一个独立的进程浏览器默认有一个主进程,来调度其它进程(进程间的通信)插件也有独立的进程管理gpu有绘图进程浏览器的渲染进程ui 渲染线程 负责页面渲染,布局,绘制js引擎线程 执行js代码的这两种线程是互斥的,不能同时执行,原因是js引擎可能会操作dom,而渲染进程依赖domjs是单线程的,但主要指

2022-05-17 21:32:00 198

原创 异步回调目前的解决方案:从generator到async

从generator到async迭代器什么叫类数组有索引有长度能遍历 let likeArray = { 0:0, 1:1, 2:2, 3:3, length:4 } let arr = [...likeArray]//报错上述并不是类数组,因为无法进行解构,说明迭代不了数组能遍历,是因为内部有迭代的方法,通过Symblo可以给上述类型设置迭代方法,使之成为类数组 const { values } =

2022-05-16 22:17:54 270

原创 promise实现

promise的理解及实现基于回调的异步解决方案缺陷js通常采用四种异步解决方案:回调、promise、Generator、async/await回调解决方案通常异步的操作需要放入回调中进行执行,若要执行串行异步,则容易造成回调嵌套promise优势通过then来实现异步的执行,解决了回调嵌套问题(本质 依然是回调)解决异步并发问题(promise.all)使错误处理变得简单promise实现初步实现思路基本状态实现添加then显示异步操作const

2022-05-13 16:16:35 177

原创 高阶函数常见场景

高阶函数高阶函数类型一个函数返回一个函数一个函数的参数是高阶函数高阶函数作用高阶函数可以对一个函数进行扩展,使之在执行阶段能有其它业务处理形式1 function fn(){ return function(){} }形式2function(cb){ cb()}例如扩展一个函数,在其执行之前,进行其它操作function core (a,b,c){console.log(a,b,c)}Function.prototype.before

2022-05-09 15:39:33 369

原创 ESmodule规范入门

ESM基本特性自动采用严格模式,忽略“use strict" <script type="module"> console.log(this) //undefine </script>每个ESM模块都是单独的私有作用域 <script type="module"> var a = 10 </script> <script type="module"> conso

2022-04-18 12:15:58 670

原创 前端模块化的演变

模块化可以说是目前前端最重要的开发范式之一,模块化是一种思想,这种思想,在不同的前端开发阶段,其实现的方式也各不相同文件划分方式起初前端通过文件划分的方式来实现模块化,如分别定义a.js文件和b.js文件,每个文件中有相关的逻辑的变量,然后在html中统一引入这种方式有很大的缺陷首先就是全局变量的问题,引入的各个文件都将把各自的变量挂载到全局,各个文件间的变量命名也可能会有冲突,而且各个文件之间可能会有依赖关系,难以管理。命名空间方式这种方式对文件划分的方式进行了改进,针对每一个文.

2022-04-15 17:04:59 574

原创 什么是URL和URI

对于url,大家也许并不陌生,在网页请求中,经常需要填入一个url地址,用来请求其数据,那么url具体的含义是什么呢?URI说到这个问题,需要先解释一下uriuri 全称为:统一资源标识符,用来标识唯一的资源,web上几乎可用的每种资源(http文档、图像、视频片段、程序等)都需要一个个的uri进行定位标识uri一般由三部分组成:访问资源的命名机制存放资源的主机名资源自身的名称,由路径表示如:http://www.xxx.com/indexuri的标识也分为绝对和相对之分:如:.

2022-04-15 09:59:24 1393

原创 创建自己的脚手架命令工具

vue脚手架有自己的模板管理工具;vue-cli,我们也可以自己写一款自己的模板管理脚手架,通过使用自己的命令,安装相应的模板初始化项目npm初始化一个空项目创建bin/cli.js文件#! /usr/bin/env node//测试console.log('sx')创建lib/index.js文件为入口文件修改package.json{ "name": "sx", "version": "1.0.0", "description": "", "main": .

2022-03-30 10:47:41 154

原创 node中的pipe可读流

node环境中集成了对文件的读写操作,通常我们利用writeFile和readFile对文件进行读写,但是readFile是一次性对文件全部读入内存,然后写入,这样做常规上没什么问题,但是如果内容太小或者想要分段读写,就会力不从心const fs = require("fs")fs.readFile('./test1.txt',(err,obj)=>{ if(err) throw err console.log(obj.toString()) fs.w.

2022-03-24 10:30:26 635

原创 如何用gulp实现一个项目的打包构建

项目目录结构如下gulp-demo├─ .gitignore├─ gulpfile.js├─ LICENSE├─ package.json├─ public│ └─ favicon.ico├─ README.md└─ src ├─ about.html ├─ assets │ ├─ fonts │ │ ├─ pages.eot │ │ ├─ pages.svg │ │ ├─ pages.ttf │ │ └─ pages.wo.

2022-03-08 10:55:25 477

原创 gulp的基本使用

● 安装:yarn add gulp --dev● 根目录创建gulpfile.js作为gulp的入口文件○ 文件中导出函数作为任务○ 任务为异步操作○ 执行完调用传入的回调告诉gulp任务结束exports.foo = done=>{ //执行的操作 console.log('foo') //调用回调,结束任务 done()}○ 执行yarn gulp foo即可调用任务● 串行任务和并行任务○ 可以通过串行和并行决定多个任务是依次执行还是并列执行const

2022-03-08 10:44:56 261

原创 grunt的基本使用

● 新建一个项目● 初始化● 安装模块:yarn add grunt● 根目录创建入口文件:gruntfile.js● 注册任务foomodule.exports = grunt =>{ grunt.registerTask('foo',()=>{ console.log('foo') })}● 执行任务:yarn grunt foo● default任务为默认任务,第二个参数可以是提示,直接运行yarn grunt即可 grunt.regis

2022-03-04 09:11:51 657

原创 前端自动化构建入门

前端三剑客可以使我们构建出想要的网页,但是这种流程并不完美,比如css的样式书写方式引用复杂,重用率低,以至于有人更青睐于less、sass等样式编写风格,但是浏览器并不能直接解析sass,这就需要前端构建工具将我们的源代码重新构建成浏览器能解析的方式sass官方有自己的源码解析工具,能将用户编写的sass转译成css,从而让浏览器使用安装 yarn add sass --dev安装好之后node_modules文件夹中的.bin目录里就有了sass.cmd程序调用该程序,即可将sass文.

2022-03-02 16:03:57 483

基于arcengine二次开发的校园管理系统

基于arcengine二次开发的校园管理系统,实现路径规划、停车点查找、范围分析、空间分析、数据修改以及基本的场景漫游

2024-05-15

基于shp数据实现obj模型的切割(模型单体化思路)

在三维仿真的场景中,无人机影像的建模是一种快速可靠的对大场景地形三维重现的方式,但是无人机影像的建模无法对单个场景的属性进行分析,如对单个楼层、居民区进行属性分析查询。在GIS中,我们通过shp数据描述空间信息,这些数据通常以点线面的形式,即概括了地物的空间关系也包含地物的属性信息。通过shp数据和无人机影像建模的结合,可以将大范围三维场景的模型进行分割,使之成为一个个独立的单元并且赋予属性信息,通过一个小实验来实现shp面对obj模型中某个单个建筑的分割。

2024-02-19

arcgis add-in实现缓冲区分析

arcgis add-in实现缓冲区分析

2024-02-18

arcengine实现地图标注渲染

基于C#+arcengine二次开发,支持地图查看,自定义标注显示,通过匹配属性表字段,实现对应的标注的渲染在地图上。 在地图渲染中,需要面对一个场景,即需要渲染的标注不在属性表内,但是与属性表内的字段相关,比如字段值为xiaomiao,在地图上则需要渲染成小猫,这时就需要匹配渲染,通过读取字段值,匹配要渲染的内容,然后渲染到地图上。程序基于C#和arcengine开发,将默认数据替换成自己的mxd,运行即可实现数据的展示,同时提供标注按钮,点击按钮,实现标注功能。

2024-02-18

计算obj模型的中心点和外包范围

obj模型的中心点往往对应模型的定位问题,通过python脚本,可以一键快速求取三维模型的中心点和外包范围,通过这些信息,即可方便的对模型进行平移定位已经翻转操作。 程序运行方法:打开程序文件,将自己需要处理的模型地址进行替换,然后pip install相关的依赖包(基于原生,基本不需要安装其它依赖),然后即可运行。 程序基于python语言实现,皆是最基本的语法规则,便于学习和阅读。

2024-01-29

python脚本实现shp文件转geojson文件

针对QGIS中shp转geojson数据容易造成中文乱码问题 提出针对python脚本的一键转换,在代码中只需要更改自己的文件地址,运行即可实现代码的转换。 脚本依靠GIS常用GDAL库实现,安装简单,熟悉基本的python语法即可实现,运行方便,一键转换

2024-01-29

3857投影坐标和4326地理坐标互转的python代码

相当于wgs84和墨卡托的相互转换 点击文件,输入的文件名改成自己的,直接运行集合输出 程序实现地理坐标的相互转换,可以学习到GIS领域gdal库的相关运用,同时学习基础的python语法

2024-01-29

2021-2022年12个月全球风场数据,json格式,用于二三维风场可视化展示

基于.nc4格式文件提取成json,包含header和data两部分,header中有数据的时间、经纬度,栅格划分,步长等,data指风场数据值

2022-08-10

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除