CesiumJS+SuperMap3D.js混用实现天际线分析

news2024/9/30 3:22:07

 版本简介:

cesium:1.99;Supermap3D:SuperMap iClient JavaScript 11i(2023);

官方下载文档链家:SuperMap技术资源中心|为您提供全面的在线技术服务

示例参考:support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#analysis

support.supermap.com.cn:8090/webgl/examples/webgl/examples.html

1. Cesium的使用

  • 场景初始化与渲染

function onload(Cesium) {
    Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI...';
    var viewer = new Cesium.Viewer('Container');
    viewer.scenePromise.then(function(scene){
        init(Cesium, scene, viewer);
    });
}
  • Cesium.Ion.defaultAccessToken: Cesium Ion是用于访问Cesium中的3D地形、卫星影像等服务。在这里,初始化时提供了Ion的访问密钥。
  • Cesium.Viewer: 创建Cesium的3D场景,并绑定到Container这个div元素。这个viewer负责加载Cesium的地形、影像等基础资源。
  • scenePromise: Cesium.Viewer会返回一个scene对象,表示当前Cesium的场景。之后我们通过init函数进一步对场景进行设置。
  • 影像图层添加

    var labelImagery = new Cesium.TiandituImageryProvider({
        mapStyle: Cesium.TiandituMapsStyle.CIA_C,
        token: '04e319956d6385dcdf25089104eb8b5b'
    });
    
    • 这里使用了Cesium的TiandituImageryProvider来添加天地图中文标注图层,配合Cesium的地形渲染,使地图更加丰富。
  • 光源和环境光设置

    scene.lightSource.ambientLightColor = new Cesium.Color(0.65, 0.65, 0.65, 1);
    var position1 = new Cesium.Cartesian3.fromDegrees(116.261209157595,  39.3042238956531, 480);
    var targetPosition1 = new Cesium.Cartesian3.fromDegrees(116.261209157595, 39.3042238956531, 430);
    var dirLightOptions = {
        targetPosition: targetPosition1,
        color: new Cesium.Color(1.0, 1.0, 1.0, 1),
        intensity: 0.55
    };
    directionalLight_1 = new Cesium.DirectionalLight(position1, dirLightOptions);
    scene.addLightSource(directionalLight_1);
    
    • 设置了环境光和定向光(DirectionalLight)以增强场景的光照效果。
  • 天际线分析和场景状态判断

    if (!scene.pickPositionSupported) {
        alert('不支持深度纹理,天际线分析功能无法使用!');
    }
    
    • 使用Cesium的pickPositionSupported来判断浏览器是否支持深度纹理,这对天际线分析是必须的。

2. SuperMap的使用

  • 天际线分析功能(Skyline)

    var skyline = new SuperMap3D.Skyline(scene);
    
    • 使用SuperMap3D.Skyline来初始化SuperMap的天际线分析工具,这是SuperMap提供的高级空间分析功能,用于分析城市建筑物等的天际线轮廓。
  • 绘制限高体

    var polygonHandler = new SuperMap3D.DrawHandler(viewer, SuperMap3D.DrawMode.Polygon);
    polygonHandler.drawEvt.addEventListener(function (result) {
        skyline.removeLimitbody("limitBody");
        var polygon = result.object;
        polygon.show = false;
        var pos = polygon.positions;
        var positions = [];
        for (var i = 0, len = pos.length; i < len; i++) {
            var cartographic = Ceisum.Cartographic.fromCartesian(pos[i]);
            var longitude = Ceisum.Math.toDegrees(cartographic.longitude);
            var latitude = Ceisum.Math.toDegrees(cartographic.latitude);
            positions.push([longitude, latitude]);
        }
        positions = unique(positions);
        var arr = [];
        for (var i = 0, len = positions.length; i < len; i++) {
            arr.push(positions[i][0]);
            arr.push(positions[i][1]);
        }
        skyline.addLimitbody({
            position: arr,
            name: "limitBody"
        });
    });
    
    • 这里使用了SuperMap3D.DrawHandler来进行多边形绘制,完成后调用skyline.addLimitbody来添加限高体,这是SuperMap提供的另一个分析功能。
  • 加载S3M场景

    var promise = scene.open(URL_CONFIG.SCENE_CBD);
    SuperMap3D.when(promise, function (layers) {
        scene.camera.setView({
            destination: SuperMap3D.Cartesian3.fromDegrees(116.4465, 39.9066, 47.9552),
            orientation: {
                heading: 0.34395448573153864,
                pitch: -0.0538346996932666,
                roll: 6.2831853071795685
            }
        });
        for (var i = 0; i < layers.length; i++) {
            layers[i].selectEnabled = false;
        }
    }, function (e) {
        var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
        widget.showErrorPanel(title, undefined, e);
    });
    
    • 使用scene.open()加载SuperMap的S3M模型数据,并在加载完成后通过Cesium的setView来调整相机位置。

3. 前端按钮交互

  • 通过按钮与用户交互,调用不同的功能。

  • 提取天际线

    $('#chooseView').click(function () {
        var cartographic = scene.camera.positionCartographic;
        var longitude = Ceisum.Math.toDegrees(cartographic.longitude);
        var latitude = Ceisum.Math.toDegrees(cartographic.latitude);
        var height = cartographic.height;
    
        skyline.viewPosition = [longitude, latitude, height];
        skyline.pitch = Ceisum.Math.toDegrees(scene.camera.pitch);
        skyline.direction = Ceisum.Math.toDegrees(scene.camera.heading);
        skyline.radius = 10000;
        skyline.build();
    });
    
    • 点击chooseView按钮后,会获取当前相机的经纬度和高度,并使用SuperMap的skyline对象来构建天际线分析。
  • 绘制限高体

    $('#setLimitBody').click(function () {
        if (polygonHandler.active) {
            return;
        }
        polygonHandler.activate();
    });
    
    • 通过点击setLimitBody按钮,激活多边形绘制功能(由SuperMap提供),绘制完成后会自动调用skyline.addLimitbody来添加限高体。
  • 清除

    $('#clear').click(function () {
        viewer.entities.removeAll();
        skyline.clear();
        polygonHandler.clear();
    });
    
    • 通过clear按钮清除场景中的所有实体(Cesium)和天际线分析数据(SuperMap)。
  • 二维天际线

    $('#getSkyline2D').click(function () {
        skyline.getSkyline2DAsync().then(object => {
            var myChart = echarts.init(document.getElementById("map"));
            var option = { ... };
            myChart.setOption(option);
        });
    });
    
    • 获取天际线的二维数据(由SuperMap提供),并使用Echarts库在前端绘制图表。

6.代码部分:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
    <title>天际线分析</title>
    <link href="../../public/SuperMap3D/Widgets/widgets.css" rel="stylesheet">
    <link href="../css/pretty.css" rel="stylesheet">
    <link href="../css/skyline.css" rel="stylesheet">
    <script type="text/javascript" src="../js/jquery.min.js"></script>
    <script type="text/javascript" src="../js/echarts.min.js"></script>
    <script src="../js/config.js"></script>
    <script type="text/javascript" src="../../public/SuperMap3D/SuperMap3D.js"></script>

    <script src="../../../Cesium-1.99/Build/Cesium/Cesium.js"></script>
	<link href="../../../Cesium-1.99/Build/Cesium/Widgets/widgets.css">
</head>
<body>
    <div id="Container"></div>
    <div id='loadingbar' class="spinner">
        <div class="spinner-container container1">
            <div class="circle1"></div>
            <div class="circle2"></div>
            <div class="circle3"></div>
            <div class="circle4"></div>
        </div>
        <div class="spinner-container container2">
            <div class="circle1"></div>
            <div class="circle2"></div>
            <div class="circle3"></div>
            <div class="circle4"></div>
        </div>
        <div class="spinner-container container3">
            <div class="circle1"></div>
            <div class="circle2"></div>
            <div class="circle3"></div>
            <div class="circle4"></div>
        </div>
    </div>
    <div id="toolbar" class="param-container tool-bar">
        <button type="button" id="chooseView" class="button black">提取天际线</button>
        <button type="button" id="getSkyline2D" class="button black">二维天际线</button>
        <button type="button" id="setLimitBody" class="button black">绘制限高体</button>
        <button type="button" id="getSkylineArea" class="button black">拉伸闭合体</button>
        <button type="button" id="clear" class="button black">清除</button>
    </div>
    
    <div id="map" style="position : absolute;right : 5%; bottom : 5%;width:450px;height:400px;"></div>
    
    <script type="text/javascript">
        function onload(Cesium) {
            Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlZjRiNDQyMi1mZDBhLTQxYTAtYWU4NC1hZDY4YzhjNWU3ZGEiLCJpZCI6MjMyMDI3LCJpYXQiOjE3MjI1MDEzMTd9.3lFzziTrt3ggC3pfiVmNRbSidI52EL4CsOqWKgYxHkM'
            var viewer = new Cesium.Viewer('Container');
            viewer.scenePromise.then(function(scene){
                init(Cesium, scene, viewer);
            });
        }
        function init(Cesium, scene, viewer) {
            viewer.resolutionScale = window.devicePixelRatio;
            var labelImagery = new Cesium.TiandituImageryProvider({
                mapStyle: Cesium.TiandituMapsStyle.CIA_C,//天地图全球中文注记服务
                token: '04e319956d6385dcdf25089104eb8b5b' //由天地图官网申请的密钥
        });
            var scene = viewer.scene;
            scene.shadowMap.darkness = 1.275; //设置第二重烘焙纹理的效果(明暗程度)
            
            scene.debugShowFramesPerSecond = false;
            scene.hdrEnabled = false;
            scene.sun.show = true;
            // 01设置环境光的强度-新处理CBD场景
            scene.lightSource.ambientLightColor = new Cesium.Color(0.65, 0.65, 0.65, 1);
            // 添加光源
            var position1 = new Cesium.Cartesian3.fromDegrees(116.261209157595,  39.3042238956531, 480);
            //光源方向点
    
            var targetPosition1 = new Cesium.Cartesian3.fromDegrees(116.261209157595, 39.3042238956531,430);
            var dirLightOptions = {
                targetPosition: targetPosition1,
                color: new Cesium.Color(1.0, 1.0, 1.0, 1),
                intensity: 0.55
            };
            directionalLight_1 = new Cesium.DirectionalLight(position1, dirLightOptions);
            scene.addLightSource(directionalLight_1);
    
            if (!scene.pickPositionSupported) {
                alert('不支持深度纹理,天际线分析功能无法使用!');
            }
    
            var skyline = new SuperMap3D.Skyline(scene);//创建天际线分析对象
            var polygonHandler = new SuperMap3D.DrawHandler(viewer, SuperMap3D.DrawMode.Polygon);
            var widget = viewer.Widget;
            try {
                var promise = scene.open(URL_CONFIG.SCENE_CBD);
                SuperMap3D.when(promise, function (layers) {
                    scene.camera.setView({//图层加载完成,设置相机位置
                        destination: SuperMap3D.Cartesian3.fromDegrees(116.4465, 39.9066, 47.9552),
                        orientation: {
                            heading: 0.34395448573153864,
                            pitch: -0.0538346996932666,
                            roll: 6.2831853071795685
                        }
                    });
                    for (var i = 0; i < layers.length; i++) {
                        layers[i].selectEnabled = false;
                    }
                }, function (e) {
                    if (widget._showRenderLoopErrors) {
                        var title = '加载SCP失败,请检查网络连接状态或者url地址是否正确?';
                        widget.showErrorPanel(title, undefined, e);
                    }
                });
            }
            catch (e) {
                if (widget._showRenderLoopErrors) {
                    var title = '渲染时发生错误,已停止渲染。';
                    widget.showErrorPanel(title, undefined, e);
                }
            }
            try {
    
                // 绘制多边形结束的回调事件
                polygonHandler.drawEvt.addEventListener(function (result) {
                    // 清除之前的限高体对象
                    skyline.removeLimitbody("limitBody");
                    var polygon = result.object;
                    polygon.show = false;
                    var pos = polygon.positions;
                    var positions = [];
                    // 遍历多边形,取出所有点
                    for (var i = 0, len = pos.length; i < len; i++) {
                        //转化为经纬度,并加入至临时数组
                        var cartographic = Cesium.Cartographic.fromCartesian(pos[i]);
                        var longitude = Cesium.Math.toDegrees(cartographic.longitude);
                        var latitude = Cesium.Math.toDegrees(cartographic.latitude);
    
                        positions.push([longitude, latitude]);
                    }
                    //去除重复点
                    positions = unique(positions);
                    var arr = [];
                    //再次遍历转化为接口所需的数组格式
                    for (var i = 0, len = positions.length; i < len; i++) {
                        arr.push(positions[i][0]);
                        arr.push(positions[i][1]);
                    }
    
                    //添加限高体对象
                    skyline.addLimitbody({
                        position: arr,
                        name: "limitBody"
                    });
                });
                //去重函数
                unique = function (arr) {
                    var res = [];
                    var json = {};
                    for (var i = 0; i < arr.length; i++) {
                        if (!json[arr[i]]) {
                            res.push(arr[i]);
                            json[arr[i]] = 1;
                        }
                    }
                    return res;
                };
                function mousestyle() { //鼠标样式
                    viewer.enableCursorStyle = false;
                    viewer._element.style.cursor = '';
                    $('body').removeClass('drawCur').addClass('drawCur');
                }
                
                $('#chooseView').click(function () {
                    var cartographic = scene.camera.positionCartographic;
                    var longitude = Cesium.Math.toDegrees(cartographic.longitude);
                    var latitude = Cesium.Math.toDegrees(cartographic.latitude);
                    var height = cartographic.height;
    
                    //天际线分析的视口位置设置成当前相机位置
                    skyline.viewPosition = [longitude, latitude, height];
                    //设置俯仰和方向
                    skyline.pitch = Ceisum.Math.toDegrees(scene.camera.pitch);
                    skyline.direction = Ceisum.Math.toDegrees(scene.camera.heading);
                    skyline.radius = 10000; // 天际线分析半径设置为10000米
                    skyline.build();
                    $("#getSkyline2D").show();
                    $("#setLimitBody").show();
                    $("#map").hide();
                });
    
                $('#setLimitBody').click(function () {
                    mousestyle();
                    if (polygonHandler.active) {
                        return;
                    }
                    polygonHandler.activate();
                });
                
                $('#clear').click(function () {
                    viewer.entities.removeAll();
                    skyline.clear();
                    polygonHandler.clear();
                    $("#map").hide();
                });
                $('#getSkylineArea').click(function () {
                    var cartographic = scene.camera.positionCartographic;
                    var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
                    var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
                    var height = cartographic.height;
                    var points = skyline.getSkyline3D();
                    var pointArr = new Array();
                    var cameraPoint = SuperMap3D.Cartesian3.fromDegrees(longitude, latitude, height);
                    pointArr.push(cameraPoint);
                    for (var i = 0; i < points.x.length; i++) {
                        var point = SuperMap3D.Cartesian3.fromDegrees(points.x[i], points.y[i], points.z[i]);
                        pointArr.push(point);
                    }
                    viewer.entities.add({
                        polygon: {
                            extrudedHeight: 30,
                            hierarchy: pointArr,
                            perPositionHeight: true,
                            material: SuperMap3D.Color.ORANGE.withAlpha(1.0)
                        }
                    })
                });
    
                $('#getSkyline2D').click(function () {
                    //获取二维天际线对象,兼容webgpu
                    skyline.getSkyline2DAsync().then(object=>{
                        //用echarts绘制二维天际线
                        var myChart = echarts.init(document.getElementById("map"));
                        var option = {
                            backgroundColor: "rgba(73,139,156,0.9)",
                            title: {
                                text: "二维天际线"
                            },
    
                            tooltip: {
                                trigger: "axis"
                            },
    
                            calculable: true,
                            xAxis: [
                                {
                                    type: "category",
                                    boundaryGap: false,
                                    data: object.x,
                                    show: false
                                }
                            ],
    
                            yAxis: [
                                {
                                    type: "value",
                                    min: 0,
                                    max: 1
                                }
                            ],
    
                            series: [
                                {
                                    name: "",
                                    type: "line",
                                    data: object.y
                                }
                            ]
                        };
                        myChart.setOption(option);
                        $("#map").show();
                    });
                });
            }
            catch (e) {
                if (scene.context.depthTexture) {
                    swal("天际线分析", "该浏览器不支持深度纹理检测", "warning");
                }
            }
            $("#toolbar").show();
            $('#loadingbar').remove();
        }
        if (typeof SuperMap3D !== 'undefined') {
            window.startupCalled = true;
            onload(SuperMap3D);
        }
    </script>
    </body>
    </html>
    

7.实现效果展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Arduino】BNO085 姿态的 3D模型 展示方法(映射到 Unity)

总览 1.arduino 代码和库等… 2.Unity 的部分&#xff0c;创建一个 3D 工程&#xff0c;然后创建一个 cube&#xff0c;绑定一个脚本文件 3.效果预览&#xff1a; 【Arduino】BNO085 姿态的 3D模型 展示方法&#xff08;映射到 Unity&#xff09; 一、Arduino 部分 1.使用的…

《Exploit temporal cues in multi-camera 3D object detection》论文泛读

ReadPaperhttps://readpaper.com/pdf-annotate/note?pdfId4666749915775385601eId2491528568128599808 针对单帧数据含有的信息太少的问题&#xff0c;提出了一种新的方法&#xff0c;BEVDet4D&#xff0c;这种方法可以访问时间线索&#xff0c;并且取得了较好的表现&#xff…

C++类与对象深度解析(一):从抽象到实践的全面入门指南

文章目录 C 类与对象——详细入门指南前言1. 类的定义1.1 类定义的基本格式示例代码解释 1.2 访问限定符示例代码解释 1.3 类域示例代码解释 1.4 成员命名规范常见的命名约定&#xff1a;示例&#xff1a;拓展&#xff1a; 1.5 class与struct的默认访问权限示例&#xff1a; 2.…

Leetcode 每日一题:Decode String

写在前面&#xff1a; 最近求职季找工作忙的焦头烂额&#xff0c;同时这个学期的助教工作也比之前的工时多了一倍&#xff0c;昨天又拖更了真的对不起大家&#xff5e;&#xff5e; 今天我们来看一道稍微轻松一点的题&#xff0c;这道题目来源于 Valid Parenthesis&#xff0…

房产销售系统:SpringBoot技术优化方案

第三章 系统分析 3.1 系统设计目标 房产销售系统主要是为了用户方便对房源信息管理、房源类型管理、房子户型管理、交易订单管理、预约看房管理、评价管理等信息进行查询&#xff0c;也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各…

ESP32聊天机器人之一

想做情感陪伴机器人&#xff0c;看到B站有个项目很有趣&#xff0c;使用一块esp32复刻了B站MeteWu的ESP32大模型聊天项目。 自己做了一些修改&#xff0c;加了一些简单的表情&#xff0c;角色扮演&#xff0c;切换大模型和温湿度传感器等功能。可以用于玩具&#xff0c;聊天机…

第307题|快速掌握 反常积分敛散性判定的方法|武忠祥老师每日一题

解题思路&#xff1a;先判断这个反常积分的敛散性&#xff0c;再讨论a的取值范围; 判断反常积分的敛散性&#xff0c;我们通常有三个方法&#xff1a; &#xff08;1&#xff09;根据定义&#xff0c;通常在原函数比较好求的情况下&#xff0c;可以根据定义 &#xff08;2&am…

IDEA 常用配置和开发插件

件市场中搜索并安装“Git Integration”插件。 一、前言 在本篇文章中我会为大家总结一些我自己常用的配置和开发插件&#xff0c;此外也给大家提供一个建议&#xff0c;可以根据自己的项目需求和个人偏好选择适合的插件。另外&#xff0c;IDEA 也在不断更新&#xff0c;可能会…

『功能项目』战士职业平A怪物掉血【44】

我们打开上一篇43事件中心的项目&#xff0c; 本章要做的事情是给主角增加一个xxxCtrl.cs脚本&#xff0c;再创建一个xxxOpt.cs调用xxxCtrl.cs机制层利用事件中心再写一个主角战士平A对怪物的伤害 首先创建脚本&#xff1a;PlayerCtrl.cs using UnityEngine; public class Pla…

2024年微电子与纳米技术国际研讨会(ICMN 2024) Microelectronics and Nanotechnology

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus大会时间&#xff1a;2024年9月20-22日地点&#xff1a;成都…

Java项目: 基于SpringBoot+mybatis+maven服装生产管理系统(含源码+数据库+任务书+开题报告+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismaven服装生产管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

0基础跟德姆(dom)一起学AI 数据处理和统计分析02-Linux进阶

* vi编辑器 * 权限相关 * 进程,网络相关 * 压缩和解压缩 * 软件安装-yum方式 * 其它命令 --- 1.过滤和管道命令 shell # grep命令, 用来过滤的 # 格式 grep [-n] 关键字 文件路径 # 从文件中过滤出要查找的内容, -n:表示带行号. # | 管道符, 即: 把前边命令的执行结果,…

Ceisum(SuperMap iClient3D for Cesium)实现平面裁剪

1&#xff1a;参考API文档&#xff1a;SuperMap iClient3D for Cesium 开发指南 2&#xff1a;官网示例&#xff1a;support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/examples.html#layer 3&#xff1a;SuperMap iServer&#xff1a;欢迎使用 SuperMap iServer 11…

ArcGIS属性表汉字转拼音

直接复制粘贴现成代码&#xff1a; # -*- coding: utf-8 -*-import arcpyfrom arcpy import envimport osimport pypinyin import sys# 不带声调皿stylepypinyin.NORMAL)def pinyin(word): s for i in pypinyin.pinyin(word, stylepypinyin.NORMAL): s .join(…

idea中java及java web项目的常见问题

1、乱码问题&#xff0c;主要有几处地方&#xff0c;需要检查。 ①确保文件编码&#xff0c;其实主要就是在idea启动文件中&#xff0c;增加了 -Dfile.encodingUTF-8的设置 ②编辑器默认编码&#xff0c;都改为UTF-8 ③Tomcat的运行配置&#xff0c;编码也改为UTF-8,同样使用…

PHP省时省力海报在线制作系统小程序源码

省时省力海报在线制作系统&#xff1a;设计小白也能秒变大师 &#x1f3a8; 开篇&#xff1a;告别繁琐&#xff0c;拥抱高效设计 你还在为设计一张海报而熬夜加班吗&#xff1f;还在为找不到合适的素材而焦头烂额吗&#xff1f;别担心&#xff0c;“省时省力海报在线制作系统”…

Linux python pyinstaller 打包问题

1.环境 系统版本:Linux -4.19.91-24.8.el8.ks8.11.x86_64-x86_64-with-kylin-10-Sun python 版本 &#xff1a;3.11.2 pyinstaller &#xff1a;6.10.0 pyinstaller 安装不在说明 2.打包 [rootlocalhost pythonNacos]# /usr/local/python3.11/bin/pyinstaller --onefile…

AI+代码审核平台CodeSec获CCIA中国网络安全创新创业大赛总决赛三等奖

近日&#xff0c;由中央网信办指导&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;主办的2024年中国网络安全创新创业大赛总决赛及颁奖典礼在国家网络安全宣传周落下帷幕。开源网安“AI代码审核平台CodeSec V4.0” 凭借在AI方向的技术创新、技术突破及功能应用创…

服务器基础知识拓展( Linux 网络操作系统 03)

1 什么是服务器 服务器就是在网络中为其他客户机提供服务的计算机。 服务器是计算机的一种&#xff0c;它是在网络操作系统的控制下为网络环境里的客户机&#xff08;如PC&#xff09;提供共享资源&#xff08;包括查询、存储、计算等&#xff09;高性能计算机&#xff0c;它…

OpenCV class1-C#+winfrom显示控件并内存管理

OpenCV是一个开源的跨平台计算机视觉库,提供了丰富的图像和视频处理算法。它采用C语言编写,并提供了C、Python、Java等多种语言接口,可广泛应用于各种计算机视觉相关领域。OpenCV具有强大的图像处理能力,包括图像滤波、几何变换、特征提取等,同时也支持视频分析、目标检测与跟踪…