WebGIS实战开源项目:智慧机场三维可视化(学习笔记)

From:新中地

1.简介

智慧机场解决方案,基于数字化大平台,融合AI、大数据、IoT、视频云、云计算等技术,围绕机场“运控、安防、服务”三大业务领域,构建“出行一张脸”及“运行一张图”两大场景化解决方案。

https://gitee.com/iGaoWei/big-data-viewhttps://github.com/antvis/L7BigDataView: 100+套大数据可视化炫酷大屏Html5模板;包含行业:社区、物业、政务、交通、金融银行等,全网最新、最多,最全、最酷、最炫大数据可视化模板。陆续更新中[这里是图片002]https://gitee.com/iGaoWei/big-data-viewGitHub - antvis/L7: ?? Large-scale WebGL-powered Geospatial Data Visualization analysis engine.?? Large-scale WebGL-powered Geospatial Data Visualization analysis engine. - antvis/L7[这里是图片003]https://github.com/antvis/L7L7 - AntVL7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视化能力。L7 的目标是提供一套地理空间数据可视化框架,易用易扩展,支持海量数据的高性能和 3D 高质量渲染,安全可靠的地理空间数据可视化解决方案。[这里是图片004]https://antv-2018.alipay.com/zh-cn/l7/1.x/index.html

L7 是由蚂蚁金服 Antv 数据 可视化团队推出的基于 webGL的开源大规模 地理空问数据 可化视分析开发框架。
L7中的L代表 Location ,7 代表世界七大洲 ,寓意能为 全球位置 数据提供可视分析的能力。L7 专注数据可视化化表达,通过颜色、大小、纹理,方向,体积等视觉变量设置实现从数据到信息清晰,有效的表达。
L7 能够满足常见的地图图表,B1系统的可视化分析、以及 GIS,交通,电力,国土农业,城市等领域的空间信息管理,分析等应用系统开发需求。

核心特性

  • 数据驱动可视化展示

数据驱动,灵活数据映射,从数到形,支持丰富的地图可视化类型,更好洞察数据。、

  • 2D,3D 一体化的海量数据高性能渲染

海量空间数据实时,可交互,动态渲染

  • 简单灵活的数据接入

支持 CSV,JSON,GeoJSON 等数据格式接入,可以根据需求自定义数据格式,无需复杂的空间数据转换。

  • 多地图底图支持,支持离线内网部署

屏蔽不同底图之间的差异,用户只需要关注数据层表达,交互,高德地图国内合法合规的地理底图,Mapbox满足国际化业务需求。

支持丰富的图表类型
点图层 : 气泡图 散点图 符号地图 3D 柱状地图
线图层 : 路径地图 弧线(支持 2D 弧线、3D 弧线以及大圆航线) 等值线
面图层 : 填充图
热力图 : 经典热力图

2.简单使用L7

快速上手 · 语雀

快速上手 | AntV L7 地理空间数据可视化引擎

2.1 安装cdn

<script src="https://unpkg.com/@antv/l7'></script>

2.2 初始化地图

按住鼠标右键 上下拖动地图, 或者ctrl+ 左键

    <!--2、设置L7地图的挂载点-->
    <div id="map">
    </div>
<script>
    /*3、实例化场景*/
    const scene = new L7.Scene({
    /*通过id将实例化的场景挂载到对应的DOM元素之上*/
        id: "map",
        map: new L7.GaodeMap({
            style: "dark",
            center:[114.30,30.50],
            zoom: 14,
            pitch: 0, // 0-90 地图俯仰角
        })
    })
</script>

2.3 Scene参数解释及控件

Scene 属性 配置项
Scene基础的地图类,提供地图创建,图层创建,管理等功能

  1. L7 侧重于地理数据的可视化表达

  2. 地图层需要依赖第三方地图,第三方地图通过 Scene的 map 属性 统一创建

    const scene = new L7.Scene({
    id: “map”, // 设置实例场景的挂载点
    map: new L7.GaodeMap({ // map 地图配置项
    style: “dark”, // 地图样式 dark|light |normal|blank
    center:[114.30,30.50], // 设置中心点
    zoom: 14, // 放大级别
    minZoom: 14, // 地图最小缩放等级 0~22
    maxZoom: 14, // 地图最大缩放等级 0~22
    pitch: 0, // 俯仰角
    }),
    logoVisible: false, // 控制logo的显示和隐藏
    })

    // 需求添加自定义的logo控件
    scene.on(“loaded”,()=>{
    const logo = new L7.Logo({
    // 图片 url
    img: ‘https://img.gejiba.com/images/dfdb6db1623eb881e724f58d9a366af8.jpg’,
    //跳转地址
    href:“http://www.baidu.com/”,
    position:“bottomright”
    })
    scene.addControl(logo);
    /设置地图主题控件/
    const mapTheme = new L7.MapTheme({})
    scene.addControl(mapTheme)
    })

目前 L7 支持多种地图底图

  • 高德地图 国内业务场景 合规中国地图
  • MapBox 国际业务,或者内网离线部署场景

2.4 地图操作

2.4.1、切换底图

setMapStyle(style:string): void 设置地图样式

需求:点击事件控制图层的切换

let isToggle = false;
/*给地图绑定点击事件*/
scene.on("loaded",()=>{
    scene.on("click" ,()=>{
        isToggle = !isToggle 
        if(isToggle) {
            scene.setMapStyle("normal")
        } else {
            scene.setMapStyle("dark")
        }
    })
})
2.4.2 放大缩小地图

scene.getZoom()获取缩放级别
scene.setZoom()设置缩放级别
scene.zoomIn()放大
scene.zoom0ut()缩小
scene.getCenter()获取中心点
scene.setCenter([lng, lat])设置中心点
scene.setZoomAndCenter(zoom,center)设置缩放级别和中心点

需求: 放大 缩小 地图按钮

    <!--2、设置L7地图的挂载点-->
    <div id="map">
    </div>
    <!--需要设置样式显示-->
    <button oncClick="addMap()"> 放大 </button>
    <button oncClick="reduceMap()"> 缩小 </button>
<script>
    /*3、实例化场景*/
    const scene = new L7.Scene({
    /*通过id将实例化的场景挂载到对应的DOM元素之上*/
        id: "map",
        map: new L7.GaodeMap({
            style: "dark",
            center:[114.30,30.50],
            zoom: 14,
            pitch: 0, // 0-90 地图俯仰角
        })
    })
    function addmap() {
        let zoom = scene.getZoom()
        scene.setZoom( zoom + 1 )
    }
    function reduceMap() {
        let zoom = scene.getZoom()
        scene.setZoom( zoom - 1 )
    }
</script>

3.点图层

点图层3D柱状图 - AntV

3.1 造数据

应该是这个网址 不过我没打开

L7 Editor - 基于 L7 的地理数据绘制工具

造出点数据 复制到项目

3.2 点击图层Popup弹框

var data = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "height": 10,    
        "name" : "武昌",
        },
      "geometry": {
        "type": "point",
        "coordinates": [110.478515625, 32.76880048488168],
      }
    }
  ]
}

scene.on('loaded', () => {
    // 点图层
     const pointLayer = new L7.PointLayer({})
     pointLayer.source(data) // 设置图层数据
        .shape('simple')
        .size('height', h => {
                return h
            }) // 大小  height是读取数据的properties height
        .color('mag', mag =>  mag > 4.5 ? '#5B8FF9' : '#5CCEA1';) // 设置图层颜色
        .style({ // 样式
          opacity: 0.6,
          strokeWidth: 3 // 描边
        })
        .active(true) // 设置鼠标悬浮颜色
      scene.addLayer(pointLayer);
      pointLayer.on("click" , evt => {
        let {name } = evt.features.properties
        let popup = new L7.Popup({
            lngLat: evt.lngLat,
            html: `<p>${name}</p>`
        })
        scene.addPopup(popup)
      })
});

3.3 散点动画

var data = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "height": 10,    
        "name" : "武昌",
        },
      "geometry": {
        "type": "point",
        "coordinates": [110.478515625, 32.76880048488168],
      }
    },
    {
      "type": "Feature",
      "properties": {
        "height": 20,    
        "name" : "汉阳",
        },
      "geometry": {
        "type": "point",
        "coordinates": [110.479, 32.770],
      }
    }
  ]
}

scene.on('loaded', () => {
    // 点图层
     const pointLayer = new L7.PointLayer({})
     pointLayer.source(data) // 设置图层数据
        .shape('circle')
        .size('height', h => {
                return h * 2
            })
        .color('ff2d51')
        .animate(true) // 设置动画
      scene.addLayer(pointLayer);
});

3.4 3D柱状图

var data = {} // 省略数据
scene.on('loaded', () => {
    // 点图层
     const pointLayer = new L7.PointLayer({
            zIndex: 6 // 可以设置图层堆叠顺序
        })
     pointLayer.source(data)
    .shape('name', [ 'cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn' ])
    .color('name', [ '#739DFF', '#61FCBF', '#FFDE74', '#FF896F' ]);
    .size('height', h => [ 10, h ])
    .active(true)
    .animate(true)
    scene.addLayer(pointLayer);
});

3.5 符号地图

需求 : 根据 properties 中w值的不同显示不同天气

var data = {} // 省略数据  properties 里面有w:

const weather_icon = [
    {
        type: "0-天晴",
        url: "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*kzTMQqS2QdUAAAAAAAAAAABKARQnAQ"
    },
    {
        type: "1-多云",
        url: "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*jH1XRb7F7hMAAAAAAAAAAABkARQnAQ"
    },
    {
        type: "2-小雨",
        url: "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*DccRTI6ZRLoAAAAAAAAAAABkARQnAQ"
    },
]

scene.on('loaded', () => { 
    /*实现icon的设置*/
    weather_icon.forEach( item =>{
        let type = Number(item.type.split("-")[0])
        scene.addImage(type,item.url) 
    })          
    
    // 点图层
     const pointLayer = new L7.PointLayer()
     pointLayer.source(data)
    .shape('w' , w => w)
    .size(20)
    scene.addLayer(pointLayer);
});

4.线图层

4.1 普通线

var data = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        },
      "geometry": {
        "type": "LineString",
        "coordinates": [
            [114.292975,30.488542],
            [114.29292,30.493947],
            [114.293779,30.498206],
            [114.299404,30.498846],
            [114.302326,30.497993]
        ]
      }
    }
  ]
}

scene.on('loaded', () => {
    // 线图层
     const lineLayer = new L7.LineLayer({})
     lineLayer.source(data) // 设置图层数据
        .shape('line')
        .size(2)
        .color('ff2d51')
      scene.addLayer(lineLayer);
});

4.2 中国、 全球边界数据

http://39.103.151.139:8000/gis/china

scene.on('loaded', () => {
    // 这里就是请求数据  教学中是将json下载放在data下 引入jquery依赖
    $.ajax({
        url:"/data/中国.json"
    }).then(data =>{
        // 线图层
         const lineLayer = new L7.LineLayer({})
         lineLayer.source(data) // 设置图层数据
            .shape('line')
            .size(2)
            .color('ff2d51')
          scene.addLayer(lineLayer);
    })
})

4.3 线动画

var data = {} // 上面有 省略

scene.on('loaded', () => {
    // 线图层
     const lineLayer = new L7.LineLayer({})
     lineLayer.source(data) // 设置图层数据
        .shape('line')
        .size(2)
        .color('ff2d51')
        .animate({
            trailLength: 1, // 流线长度
            interval: 0.25, // 设置间隔
            duration: 5 // 设置每段轨迹执行时间
        })
      scene.addLayer(lineLayer);
});

4.4 弧线动画

scene.on('loaded', () => {
    // 线图层
     const lineLayer = new L7.LineLayer({
        blend:"normal"
    })
     lineLayer.source(data) // 设置图层数据
        .shape('arc3d')
        .size(2)
        .color('ff2d51')
        .animate({
            trailLength: 1, // 流线长度
            interval: 0.25, // 设置间隔
            duration: 5 // 设置每段轨迹执行时间
        })
      scene.addLayer(lineLayer);
});

4.5.航线图

scene.addImage(
    'plane',
    'https://gw.alipayobjects.com/zos/bmw-prod/0ca1668e-38c2-4010-8568-b57cb33839b9.svg')
scene.on('loaded', () => {
     const lineLayer = new L7.LineLayer({
        blend:"normal"
     })
     lineLayer.source(data) // 设置图层数据
        .shape('arc')
        .size(2)
        .color('ff2d51')
      scene.addLayer(lineLayer);

     const planLineLayer = new L7.LineLayer({
        blend:"normal",
        name: "飞机"
     })
     planLineLayer.source(data) // 设置图层数据
        .shape('arc')
        .size(15)
        .color('ff6b34')
        .texture('plane')
        .animate({
            trailLength: 0.05, // 流线长度
            interval: 0.25, // 设置间隔
            duration: 51 // 设置每段轨迹执行时间
        })
        .style({
            textureBlend: 'replace',
            lineTexture: true ,// 开启线的贴图功能
            iconStep: 10, // 设置贴图纹理的间距
        })
      scene.addLayer(planLineLayer);
});

5.拓展图层

5.1 风场

点击隐藏图层 再点击显示图层

scene.on('loaded', () => {
     const windLayer = new L7.WindLayer({
        name:"风场"
     })
     windLayer.source(           
'https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*wcU8S5xMEDYAAAAAAAAAAAAAARQnAQ',
        {
          parser: {
            type: 'image',
            extent: [-180, -85, 180, 85],  // 用于设置风场图片作用到地图上的经纬图区间
          }
        }
     ) // 设置图层数据
        .animate(true)
        .style({
           numParticles: 35535,
           fadeOpacity: 0.9,
           sizeScale: 1.3,
           rampColors: {
                0.0:'#3288bd',
                0.1:'#66c2a5',
                0.2:'#abdda4',
                0.3:'#e6f598',
                0.4:'#fee08b',
                0.5:'#fdae61',
                0.6:'#f46d43',
                1.0:'#d53e4f'   
           }
        })
      scene.addLayer(windLayer);
      scene.on("loaded",() => {
        scene.on("click",()=>{
            let layer = scene.getLayerByName("风场");
            var res = layer.isVisible() // isVisible 可以判断图层的显影
            if(res) {
                layer.hide()
            } else {
                layer.show();
            }
        })
    })
});

5.2 下雨点

scene.on('loaded', () => {
    let rain = 'https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*w2SFSZJp4nIAAAAAAAAAAAAAARQnAQ',
     const layer = new L7.GeometryLayer({
        name:"暴雨点"
     })
     layer.shape('sprite')
        .size(10)
        .style({
            opacity: 0.3,
            mapTexture: rain,
            center: [120, 30],
            spriteCount: 12000,
            spriteRadius: 10,
            spriteTop: 2500000,
            spriteUpdate: 20000,
            spriteScale: 0.6,
        })
      scene.addLayer(layer);
});

5.3 根据天气不同显示不同数据

const water_icon = [] // 省略

scene.on('loaded', () => {
    water_icon.forEach(item => {
        scene.addImage(
            Number(item.type.split("-")[0]),
            item.url
        )
    })
    $.ajax({
        url:"/xxx.json"
    }).then(data => {
        let pointLayer = new L7.PointLayer({})
        pointLayer.source(data) // 设置图层数据
            .shape('weather')
            .size(15)
        scene.addLayer(layer);
    })
           
})

6. 综合项目

// 1.实现数据加载
scene.on('loaded', () => {
    Promise.all([
        /*全球数据*/
        $.ajax({
            url:"/data/world_country.json"
        })
        /*航班轨迹数据 */
        $.ajax({
            url:"/data/fly_path.json"
        })
        /*目的的数据 */
        $.ajax({
            url:"/data/fly_end.json"
        })
     ]).then(([world,fly_path,fly_end]) => {
            /* 1-1 加载全球数据 LineLayer*/
            const worldLayer= new L7.LineLayer({
                name:"world"
             })
            .source(world)
            .color("#41fc9d")
            .size(1)
            .style({
                opacity:0.4
            })
            scene.addLayer(worldLayer)
            /*1-2、加载飞行轨迹数据*/
            const flyLineLayer = new L7.LineLayer({
                name:"飞机轨迹"
            })
            .source(fly_path)
            .color("#ff6b34")
            .shape("arc")
            .size(1)
            scene.addLayer(flyLineLayer)
            // 实现飞行动画
            scene.addImage(
                'plane',
                'https://gw.alipayobjects.com/zos/bmw-prod/0ca1668e-38c2-4010-8568-b57cb33839b9.svg')
             const planLineLayer = new L7.LineLayer({
                blend:"normal",
                name: "飞机"
             })
             planLineLayer.source(fly_path) // 设置图层数据
                .shape('arc')
                .size(15)
                .color('ff6b34')
                .texture('plane')
                .animate({
                    trailLength: 0.05, // 流线长度
                    interval: 0.25, // 设置间隔
                    duration: 51 // 设置每段轨迹执行时间
                })
                .style({
                    textureBlend: 'replace',
                    lineTexture: true ,// 开启线的贴图功能
                    iconStep: 10, // 设置贴图纹理的间距
                })
              scene.addLayer(planLineLayer);
              /*1-3、加载终点数据*/
             const endLayer = new L7.PointLayer({
                zIndex: 6 ,// 可以设置图层堆叠顺序
                name:"终点"
            }).source(fly_end)
              .shape('name', [ 'cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn' ])
              .color('name', [ '#739DFF', '#61FCBF', '#FFDE74', '#FF896F' ]);
              .size([4, 100]) // 半径 高度
              .active(true)
              .animate(true)
            scene.addLayer(endLayer);
            
            //2、根据终点的天气不同,显示不同图片
            water_icon.forEach(item => {
                scene.addImage(
                    Number(item.type.split("-")[0]),
                    item.url
                )
            })
            const weather_layer = new L7.PointLayer({
                name: "天气图层"
            }).source(fly_end) // 设置图层数据
              .shape('weather')
              .size(15)
              .style({
                  offsets: [0,30]
                })
            scene.addLayer(weather_layer);
            
            // 风场
            const windLayer = new L7.WindLayer({
                name:"风场"
             })
             windLayer.source(           
'https://gw.alipayobjects.com/mdn/rms_23a451/afts/img/A*wcU8S5xMEDYAAAAAAAAAAAAAARQnAQ',
                {
                  parser: {
                    type: 'image',
                    extent: [-180, -85, 180, 85],  // 用于设置风场图片作用到地图上的经纬图区间
                  }
                }
             ) 
                .animate(true)
                .style({
                   numParticles: 35535,
                   fadeOpacity: 0.9,
                   sizeScale: 1.3,
                   rampColors: {
                        0.0:'#3288bd',
                        0.1:'#66c2a5',
                        0.2:'#abdda4',
                        0.3:'#e6f598',
                        0.4:'#fee08b',
                        0.5:'#fdae61',
                        0.6:'#f46d43',
                        1.0:'#d53e4f'   
                   }
                })
                scene.addLayer(windLayer);

                /*图层控制器*/
                setTimeout(()=>{
                    const layerSwitch = new L7.LayerSwitch({
                        layers:scene.getLayers()
                    })
                    scene.addControl(layerSwitch)
                },500)

                /*地图放大zoom>3风场隐藏 */
                scene.on("mapmove",() => {
                    let layer = scene.getLayerByName("风场");
                    let zoom = scene.getZoom();
                    if(zoom > 3){
                        layer.hide();
                    } else {
                        layer.show()
                    }
                })

                /*实现暴雨点 */
                let rain = 'https://gw.alipayobjects.com/mdn/rms_816329/afts/img/A*w2SFSZJp4nIAAAAAAAAAAAAAARQnAQ',
                 const layer = new L7.GeometryLayer({
                    name:"暴雨点"
                 }).shape('sprite')
                    .size(10)
                    .style({
                        opacity: 0.3,
                        mapTexture: rain,
                        center: [120, 30],
                        spriteCount: 12000,
                        spriteRadius: 10,
                        spriteTop: 2500000,
                        spriteUpdate: 20000,
                        spriteScale: 0.6,
                    })
                  scene.addLayer(layer);
      })         
})
// 点击消息提示 飞往暴雨点
function flyToRain(){
    scene.setZoomAndCenter(6,[105.318756,61.52401])
}
// 复位地图
function resetMap(){
    scene.setZoomAndCenter(origin_zoom,origin_center)
}
// 改变终点样式
function controlEnd(){
    let layer =scene.getLayerByName("终点");
    layer.shape("circle").size(30).color("#ffed11")
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩转OCR | 探索腾讯云智能结构化识别新境界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo 前言摘要引言Task 相关工作方法SDM-UniPS预处理尺度不变的空间光特征编码器像素采样变压器的非局部交互 PS-Mix数据集 实验结果训练细节评估和时间&#xff1a; 消融实验定向照明下的评估没有对…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…

VUE 3.0 如何新建项目 详细教程 附环境搭建 推荐

本人新入手一台电脑&#xff0c;需要安装各种环境配置&#xff0c;顺便把过程记录一下&#xff0c;方便自己以后查看&#xff0c;也欢迎大家参考交流。 目录 一、环境搭建&#xff1a; 1.Node.js安装 2.国内淘宝镜像设置 3.安装vue 环境 二、新建vue项目 1.vue脚手架新建…

牛客网刷题 ——C语言初阶——BC114 小乐乐排电梯

1.牛客网 &#xff1a;BC114 小乐乐排电梯 题目描述&#xff1a; 小乐乐学校教学楼的电梯前排了很多人&#xff0c;他的前面有n个人在等电梯。电梯每次可以乘坐12人&#xff0c;每次上下需要的时间为4分钟&#xff08;上需要2分钟&#xff0c;下需要2分钟&#xff09;。请帮助…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D

‘vite‘ 不是内部或外部命令,也不是可运行的程序

报错&#xff1a;执行 npm run dev时&#xff0c;提示’vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 解决&#xff1a;执行 npm install -g vite 报错&#xff1a;导入vite后再次执行npm run dev&#xff0c;报错failed to load config from E:\eclipseWP\test1…

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库&#xff0c;失效了&#xff0c;上网查方法&#xff0c;都说是网络代理的问题&#xff0c;各种清理网络代理后都无效&#xff0c;去问同事&#xff1a; 先前都是直接复制的网页url当做远端url&#xff0c;或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…

apisix docker 安装

git clone https://github.com/apache/apisix-docker.git cd apisix-docker/example nano docker-compose 主要修改这里ETCD_ADVERTISE_CLIENT_URLS: "http://192.168.31.160:2379" docker compose -p docker-apisix up -d#安装apisix-dashboard docker pull apache/…

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“

相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…

第13篇 冒泡排序__ARM C语言<二>

Q&#xff1a;如何设计ARM C语言程序对数组进行降序排列&#xff1f; A&#xff1a;基本原理也和Nois II C语言程序一样&#xff1a;通过不断的比较和交换数组中的数据元素&#xff0c;最终使得最大的数据“冒泡”排到到数组最末&#xff0c;并逐步缩小待排序的范围直到所有数…

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集AI-FGTM介绍算法流程初始化迭代更新&#xff08; t 0 t 0 t0 到 T − 1 T - 1 T−1&#xff09;迭代完成 AI-FGTM代码实现AI-FGTM算法实现攻击效果 代码汇总aifgtm.pytrain.pyadvtest.py 之前已经…

C++程序启动报错和启动失败的常见原因分析与排查经验总结

目录 1、概述 2、程序启动报错的原因分析与排查方法 2.1、程序启动时报找不到依赖的dll库 2.1.1、找不到C/C运行时库 2.1.2、找不到依赖的业务库 2.2、程序启动时报在依赖的dll库中找不到接口 2.3、程序启动时报0xC000007B错误码 3、程序启动不了&#xff08;启动失败&…

《通义千问AI落地—中》:前端实现

一、前言 本文源自微博客且已获授权,请尊重版权. 书接上文&#xff0c;上文中&#xff0c;我们介绍了通义千问AI落地的后端接口。那么&#xff0c;接下来我们将继续介绍前端如何调用接口以及最后的效果&#xff1b;首先看效果&#xff1a; 上述就是落地到本微博客以后的页面效果…

Python OCR 文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…

闯关leetcode——3158. Find the XOR of Numbers Which Appear Twice

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/find-the-xor-of-numbers-which-appear-twice/description/ 内容 You are given an array nums, where each number in the array appears either once or twice. Return the bitwise XOR of all …

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…

shiro权限校验demo

这里通过链式hashmap添加进去接口权限&#xff0c;用安全管理器设置过滤&#xff0c;并且设置登录跳转&#xff08;登录页面需要自己写&#xff0c;shiro不提供&#xff0c;不像springboot那样智能&#xff09; 效果如下&#xff1a; 点击add和update均跳转到如下登录页面 那么…

基于单片机的多功能智能小车(论文+源码)

1.系统整体方案 此次多功能智能小车的设计系统&#xff0c;其整个控制电路的框架如下图所示。整个系统采用STC89C52单片机为控制器其中&#xff1a;LCD液晶负责显示当前信息,蜂鸣器负责特殊情况下进行报警提醒,红外遥控模块方便用户进行远程操作小车,电机模块拟采用前驱的方式…

Log4j1.27配置日志输出级别不起效

起因&#xff1a;构建独立版本debezuim使用时&#xff0c;日志一直打印debug信息。 原因&#xff1a;包冲突问题&#xff0c;进行排包操作。 参考log4j日志级别配置完成后不生效 系统一直打印debug日志_log4j不起作用-CSDN博客 1、application.properties logging.configc…