vue2中CesiumV1.113.0加载离线地形数据

 离线地形数据可以放在vue项目下的public/data/sjzTerrain文件下 
 由于地形离线数据数量太大,在vue项目编译时会报如下错误:

 ERROR in EMFILE: too many open files, open 'D:\test_project\vue_cesium_demo\public\data\sjzTerrain\.tmp\14\26787\11669.hm'

这时,我们可以把离线地形数据放在本机的iis上 

然后运行项目,不会报上面的错误了

 

   // 加载地形数据
        viewer.terrainProvider = await Cesium.createWorldTerrainAsync({
          url: "https://[ t0-t7 ].tianditu.gov.cn/mapservice/swdx?tk=天地图token", //"data/sjzTerrain/", //"http://192.168.1.143:8963/",// Cesium.IonResource.fromAssetId(1), 
          requestWaterMask: true, // 控制水的流动效果
          requestVertexNormals: true, //请求地形照明数据
        });
        viewer.scene.globe.enableLighting = true;
     new Promise(async (resolve, reject) => {
        this.viewer = new Cesium.Viewer(this.$refs.cesiumContainer, {
          selectionIndicator: false,
          infoBox: false,
          contextOptions: {
            // 硬件反走样,默认值为 1
            msaaLevel: 8,
            requestWebgl2: true,
          },
          animation: false,
          timeline: false, // 底部时间线
          fullscreenButton: false, // 全屏
          vrButton: false, // VR
          sceneModePicker: false, // 选择视角的模式(球体、平铺、斜视平铺)
          baseLayerPicker: false, // 图层选择器(地形影像服务)
          navigationHelpButton: false, // 导航帮助(手势,鼠标)
          geocoder: false, // 位置查找工具
          homeButton: false, // 视角返回初始位置
        });
        this.viewer.scene.globe.baseColor = Cesium.Color.BLACK; // 设置地球颜色
        this.viewer.cesiumWidget.creditContainer.style.display = "none"; // 去除logo
        window.viewer = this.viewer;
        // 加载地形数据
        viewer.terrainProvider = await Cesium.createWorldTerrainAsync({
          url: "https://[ t0-t7 ].tianditu.gov.cn/mapservice/swdx?tk=175171c959b6f72e789fb3c45a266d55", //"data/sjzTerrain/", //"http://192.168.1.143:8963/",// Cesium.IonResource.fromAssetId(1), //"http://192.168.1.143:8963/"
          requestWaterMask: true, // 控制水的流动效果
          requestVertexNormals: true, //请求地形照明数据
        });
        viewer.scene.globe.enableLighting = true;
        resolve(viewer);
      }).then(() => {
       
      });
加载地形数据后,可以根据经纬度获取高程
const positions = [
          Cesium.Cartographic.fromDegrees(
            114.22268842439114,
            38.134979272096594
          ),
          Cesium.Cartographic.fromDegrees(114.5199580178976, 38.1139391070047),
        ];
        const updatedPositions = await Cesium.sampleTerrainMostDetailed(
          viewer.terrainProvider,
          positions
        );
        console.log(`updatedPositions`, updatedPositions);
        try {
          const updatedPositions2 = await Cesium.sampleTerrainMostDetailed(
            viewer.terrainProvider,
            positions,
            true
          );
          console.log(`updatedPositions2`, updatedPositions2);
        } catch (error) {
          // A tile request error occurred.
        }

        const updatedPositions3 = await Cesium.sampleTerrain(
          viewer.terrainProvider,
          10,
          positions
        );
        console.log(`updatedPositions3`, updatedPositions3);
        try {
          const updatedPositions4 = await Cesium.sampleTerrain(
            viewer.terrainProvider,
            10,
            positions,
            true
          );
          console.log(`updatedPositions4`, updatedPositions4);
        } catch (error) {
          // A tile request error occurred.
        }
 完整代码
<template>
  <div class="CesiumOutbox">
    <div ref="cesiumContainer" class="cesiumContainerbox"></div>
    <button @click="HomeFun" class="Btnbox">Home</button>
  </div>
</template>

<script>
import "cesium/Build/Cesium/Widgets/widgets.css";
import * as Cesium from "cesium";
window.Cesium = Cesium;
export default {
  name: "CesiumMap",
  props: {},
  data() {
    return {
      viewer: null,
    };
  },
  mounted() {
    this.initCesium();
  },
  beforeDestroy() {
    if (this.viewer) {
      this.viewer.destroy();
      this.viewer = null;
    }
  },
  methods: {
    initCesium() {
      new Promise(async (resolve, reject) => {
        this.viewer = new Cesium.Viewer(this.$refs.cesiumContainer, {
          selectionIndicator: false,
          infoBox: false,
          contextOptions: {
            // 硬件反走样,默认值为 1
            msaaLevel: 8,
            requestWebgl2: true,
          },
          animation: false,
          timeline: false, // 底部时间线
          fullscreenButton: false, // 全屏
          vrButton: false, // VR
          sceneModePicker: false, // 选择视角的模式(球体、平铺、斜视平铺)
          baseLayerPicker: false, // 图层选择器(地形影像服务)
          navigationHelpButton: false, // 导航帮助(手势,鼠标)
          geocoder: false, // 位置查找工具
          homeButton: false, // 视角返回初始位置
        });
        this.viewer.scene.globe.baseColor = Cesium.Color.BLACK; // 设置地球颜色
        this.viewer.cesiumWidget.creditContainer.style.display = "none"; // 去除logo
        window.viewer = this.viewer;
        // viewer.imageryLayers.addImageryProvider(
        //   new Cesium.UrlTemplateImageryProvider({
        //     url: "http://webrd01.is.autonavi.com/appmaptile?&scale=1&lang=zh_cn&style=8&x={x}&y={y}&z={z}",
        //     minimumLevel: 1,
        //     maximumLevel: 18,
        //     crs: "WGS84", // 使用84坐标系,默认为:GCJ02
        //   })
        // );
        /* 
      **
       //卫片 " http://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",   
       //路网" https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=11"   
       //地名" https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=4"
       //地名+路网 " http://webst01.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}",
       //矢量切片风格 " http://webrd01.is.autonavi.com/appmaptile?&scale=1&lang=zh_cn&style=8&x={x}&y={y}&z={z}",
      */
        // const imageryLayer = new Cesium.ImageryLayer(
        //   new Cesium.UrlTemplateImageryProvider({
        //     url: "http://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
        //     minimumLevel: 1,
        //     maximumLevel: 18,
        //     crs: "WGS84", // 使用84坐标系,默认为:GCJ02
        //   })
        // );
        // viewer.imageryLayers.add(imageryLayer); //添加卫片
        // const imageryLayer2 = new Cesium.ImageryLayer(
        //   new Cesium.UrlTemplateImageryProvider({
        //     url: "https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=11",
        //     minimumLevel: 1,
        //     maximumLevel: 18,
        //     crs: "WGS84", // 使用84坐标系,默认为:GCJ02
        //   })
        // );
        // viewer.imageryLayers.add(imageryLayer2); ///添加路网
        // const imageryLayer3 = new Cesium.ImageryLayer(
        //   new Cesium.UrlTemplateImageryProvider({
        //     url: "https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=8&ltype=4",
        //     minimumLevel: 1,
        //     maximumLevel: 18,
        //     crs: "WGS84", // 使用84坐标系,默认为:GCJ02
        //   })
        // );
        // viewer.imageryLayers.add(imageryLayer3); //添加地名
        // //矢量底图
        // viewer.imageryLayers.addImageryProvider(
        //   new Cesium.WebMapTileServiceImageryProvider({
        //     url: "http://t0.tianditu.com/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=vec&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=d6a72a78a43a2c17294b72ab26354cd6",
        //     layer: "tdtImgBasicLayer",
        //     style: "default",
        //     format: "image/jpeg",
        //     tileMatrixSetID: "GoogleMapsCompatible",
        //     show: false,
        //     // maximumLevel: 18
        //   })
        // );
        // //中文地名注记
        // viewer.imageryLayers.addImageryProvider(
        //   new Cesium.WebMapTileServiceImageryProvider({
        //     url: "http://t0.tianditu.com/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk=d6a72a78a43a2c17294b72ab26354cd6",
        //     layer: "tdtAnnoLayer",
        //     style: "default",
        //     format: "tiles",
        //     tileMatrixSetID: "GoogleMapsCompatible",
        //     show: true,
        //   })
        // );
        // viewer.imageryLayers.addImageryProvider(
        //   new Cesium.WebMapTileServiceImageryProvider({
        //     url:
        //       "http://{s}.tianditu.gov.cn/cia_c/wmts?service=wmts&request=GetTile&version=1.0.0" +
        //       "&LAYER=cia&tileMatrixSet=c&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}" +
        //       "&style=default&format=tiles&tk=175171c959b6f72e789fb3c45a266d55",
        //     layer: "tdtCva",
        //     style: "default",
        //     format: "tiles",
        //     tileMatrixSetID: "c",
        //     subdomains: ["t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7"],
        //     tilingScheme: new Cesium.GeographicTilingScheme(),
        //     tileMatrixLabels: [
        //       "1",
        //       "2",
        //       "3",
        //       "4",
        //       "5",
        //       "6",
        //       "7",
        //       "8",
        //       "9",
        //       "10",
        //       "11",
        //       "12",
        //       "13",
        //       "14",
        //       "15",
        //       "16",
        //       "17",
        //       "18",
        //       "19",
        //     ],
        //     maximumLevel: 18,
        //   })
        // );
        let imgLayer = new Cesium.UrlTemplateImageryProvider({
          url: "SameUrlPath/{z}/{x}/{y}.png",
          layer: "imgLayer",
          minimumLevel: 1,
          maximumLevel:10,
        });
        viewer.imageryLayers.addImageryProvider(imgLayer);
        // viewer.camera.setView({
        //   destination: Cesium.Cartesian3.fromDegrees(113, 34, 15000.0),
        //   orientation: {
        //     heading: Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
        //     pitch: Cesium.Math.toRadians(-90), // default value (looking down)
        //     roll: 0.0, // default value
        //   },
        // });
        ///
        // 加载地形数据
        viewer.terrainProvider = await Cesium.createWorldTerrainAsync({
          url: "https://[ t0-t7 ].tianditu.gov.cn/mapservice/swdx?tk=175171c959b6f72e789fb3c45a266d55", //"data/sjzTerrain/", //"http://192.168.1.143:8963/",// Cesium.IonResource.fromAssetId(1), //"http://192.168.1.143:8963/"
          requestWaterMask: true, // 控制水的流动效果
          requestVertexNormals: true, //请求地形照明数据
        });
        viewer.scene.globe.enableLighting = true;
        const positions = [
          Cesium.Cartographic.fromDegrees(
            114.22268842439114,
            38.134979272096594
          ),
          Cesium.Cartographic.fromDegrees(114.5199580178976, 38.1139391070047),
        ];
        const updatedPositions = await Cesium.sampleTerrainMostDetailed(
          viewer.terrainProvider,
          positions
        );
        console.log(`updatedPositions`, updatedPositions);
        try {
          const updatedPositions2 = await Cesium.sampleTerrainMostDetailed(
            viewer.terrainProvider,
            positions,
            true
          );
          console.log(`updatedPositions2`, updatedPositions2);
        } catch (error) {
          // A tile request error occurred.
        }

        const updatedPositions3 = await Cesium.sampleTerrain(
          viewer.terrainProvider,
          10,
          positions
        );
        console.log(`updatedPositions3`, updatedPositions3);
        try {
          const updatedPositions4 = await Cesium.sampleTerrain(
            viewer.terrainProvider,
            10,
            positions,
            true
          );
          console.log(`updatedPositions4`, updatedPositions4);
        } catch (error) {
          // A tile request error occurred.
        }
        // 测试数据
        // 114.22268842439114 38.134979272096594
        // 114.5199580178976 38.1139391070047
        // 114.24207825088216 37.91371829614106
        // 114.56477609722275 37.908966850537524

        /
        // viewer.camera.flyTo({
        //   destination: Cesium.Cartesian3.fromDegrees(
        //     114.517971,
        //     38.054466,
        //     150000.0
        //   ),
        //   orientation: {
        //     heading: Cesium.Math.toRadians(0.0), // east, default value is 0.0 (north)
        //     pitch: Cesium.Math.toRadians(-90), // default value (looking down)
        //     roll: 0.0, // default value
        //   },
        //   duration: 2,
        // });
        resolve(viewer);
      }).then(() => {
        /
        let LogLatHeight = [];
        let LogLat = [];
        /
        let handler = new Cesium.ScreenSpaceEventHandler(
          this.viewer.scene.canvas
        );
        handler.setInputAction((movement) => {
          let ray = this.viewer.camera.getPickRay(movement.position);
          if (!ray) return null;
          let position = this.viewer.scene.globe.pick(ray, this.viewer.scene);
          if (position) {
            console.log(`movement`, movement);
            // console.log(`movement.position`, movement.position);
            console.log(`position`, position);
            let cartograhic =
              Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);
            console.log(`cartograhic`, cartograhic);
            let log = Cesium.Math.toDegrees(cartograhic.longitude);
            let lat = Cesium.Math.toDegrees(cartograhic.latitude);
            let height = cartograhic.height;
            console.log(`log,lat,height`, log, lat, height);
            LogLatHeight.push(log, lat, height);
            console.log(`LogLatHeight`, LogLatHeight);
            LogLat.push(log, lat, 0);
            console.log(`LogLat`, LogLat);
          }
        }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
        // this.DrawPointFun();
        // this.DrawPolylineFun();
        // this.DrawPolygonFun();
        // this.DrawLabelFun();
        // this.DrawBillboardFun();
        // // this.DrawGeoJsonFun();
        // // this.DrawKMLFun();
        // this.DrawCesium3DTileFun();
      });
    },
    HomeFun() {
      viewer.camera.flyHome();
    },
    DrawPointFun() {
      const dataSource = new Cesium.CustomDataSource("myPointData");
      viewer.dataSources.add(dataSource);
      let PointData = {
        position: Cesium.Cartesian3.fromDegrees(116.1, 34, 0),
        point: {
          color: Cesium.Color.RED,
          outlineColor: Cesium.Color.YELLOW,
          outlineWidth: 5,
          pixelSize: 30,
          //scaleByDistance: true,
        },
      };
      const entity = dataSource.entities.add(PointData);
    },
    DrawPolylineFun() {
      const dataSource = new Cesium.CustomDataSource("myPolylineData");
      viewer.dataSources.add(dataSource);
      const PolylineData = {
        name: "Red dashed line",
        polyline: {
          positions: Cesium.Cartesian3.fromDegreesArrayHeights([
            113, 34, 0, 116, 34, 0,
          ]),
          width: 25,
          // material:  new Cesium.PolylineOutlineMaterialProperty({
          //   color:Cesium.Color.RED,
          //   outlineColor:Cesium.Color.YELLOW,
          //   outlineWidth:10
          // }),
          material: new Cesium.PolylineArrowMaterialProperty(Cesium.Color.RED),
          // material: new Cesium.PolylineDashMaterialProperty({
          //   color: Cesium.Color.RED,
          // }),
        },
      };
      const entity = dataSource.entities.add(PolylineData);
    },
    DrawPolygonFun() {
      const dataSource = new Cesium.CustomDataSource("myPolylineData");
      viewer.dataSources.add(dataSource);
      let PolygonData = {
        name: "Red polygon on surface",
        polygon: {
          hierarchy: Cesium.Cartesian3.fromDegreesArray([
            115.0, 34.0, 115.0, 34.0, 115.1, 33.9, 115.0, 33.6, 115.6, 33.5,
          ]),
          material: Cesium.Color.RED,
        },
      };
      const entity = dataSource.entities.add(PolygonData);
    },
    DrawLabelFun() {
      const dataSource = new Cesium.CustomDataSource("myLabelData");
      viewer.dataSources.add(dataSource);
      Cesium.Label.enableRightToLeftDetection = true;
      let LabelData = {
        position: Cesium.Cartesian3.fromDegrees(116, 34.1522222),
        label: {
          text: "Philadelphia",
          font: "24px Helvetica",
          fillColor: Cesium.Color.SKYBLUE,
          outlineColor: Cesium.Color.BLACK,
          outlineWidth: 2,
          style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        },
      };
      dataSource.entities.add(LabelData);
    },
    DrawBillboardFun() {
      const dataSource = new Cesium.CustomDataSource("myBillboardData");
      viewer.dataSources.add(dataSource);
      let BillboardData = {
        position: Cesium.Cartesian3.fromDegrees(115.5, 34.1522222),
        billboard: {
          image: require("@/assets/logo.png"),
          show: true, // default
          pixelOffset: new Cesium.Cartesian2(0, 0), // default: (0, 0)
          eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // default
          horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // default
          verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // default: CENTER
          scale: 2.0, // default: 1.0
          color: Cesium.Color.LIME, // default: WHITE
          //rotation: Cesium.Math.PI_OVER_FOUR, // default: 0.0
          alignedAxis: Cesium.Cartesian3.ZERO, // default
          width: 200, // default: undefined
          height: 200, // default: undefined
        },
        label: {
          text: "标牌、点",
          font: "24px Helvetica",
          fillColor: Cesium.Color.RED,
          outlineColor: Cesium.Color.BLACK,
          outlineWidth: 2,
          style: Cesium.LabelStyle.FILL_AND_OUTLINE,
          showBackground: true,
          backgroundColor: new Cesium.Color(0.165, 0.165, 0.165, 0.8),
          backgroundPadding: new Cesium.Cartesian2(7, 5),
          pixelOffset: new Cesium.Cartesian2(0, 50), // default: (0, 0)
          eyeOffset: new Cesium.Cartesian3(0.0, 0.0, -10.0), // default
        },
        point: {
          color: Cesium.Color.fromCssColorString("#ff0000").withAlpha(0.6),
          outlineColor: Cesium.Color.YELLOW,
          outlineWidth: 5,
          pixelSize: 30,
          //scaleByDistance: true,
        },
      };
      let entity = dataSource.entities.add(BillboardData);
      //viewer.zoomTo(entity);
    },
    DrawGeoJsonFun() {
      var promise = Cesium.GeoJsonDataSource.load(
        require("./data/hbeiprovince.json")
      );
      promise.then((datasource) => {
        viewer.dataSources.add(datasource);
        datasource.entities.values.forEach((enetity) => {
          console.log(enetity);
          enetity.polygon.outlineColor = Cesium.Color.RED;
          enetity.polygon.material = Cesium.Color.BLUE;
          enetity.polygon.height = 1000;
          enetity.polygon.extrudedHeight = 2000;
        });
        //viewer.zoomTo(datasource);
      });
    },
    DrawKMLFun() {
      var promise = Cesium.KmlDataSource.load("data/test.kml", {
        camera: viewer.scene.camera,
        canvas: viewer.scene.canvas,
      });
      promise.then((datasource) => {
        viewer.dataSources.add(datasource);
        //viewer.zoomTo(datasource);
        datasource.entities.values.forEach((enetity) => {
          enetity.polygon.outlineColor =
            Cesium.Color.fromCssColorString("#ffADDF");
          enetity.polygon.material = Cesium.Color.fromCssColorString("#67ff0F");
          enetity.polygon.height = 1000;
          enetity.polygon.extrudedHeight = 2000;
        });
      });
    },
    async DrawCesium3DTileFun() {
      // try {
      //   const tileset =await Cesium.Cesium3DTileset.fromUrl("data/test3dtiles/tileset.json")// await Cesium.Cesium3DTileset.fromIonAssetId(75343);
      //   viewer.scene.primitives.add(tileset);
      //   viewer.zoomTo(tileset);
      // } catch (error) {
      //   console.log(`Error loading tileset: ${error}`);
      // }
      // viewer.scene.globe.depthTestAgainstTerrain = true;

      /
      const tilesetOption = {
        skipLevelOfDetail: true,
        baseScreenSpaceError: 1024,
        skipScreenSpaceErrorFactor: 16,
        skipLevels: 1,
        immediatelyLoadDesiredLevelOfDetail: false,
        loadSiblings: false,
        cullWithChildrenBounds: true,
      };
      const modelPromise = this.AddThreeDTiles(
        "data/test3dtiles/tileset.json",
        tilesetOption
      ); // 模型切瓦后的瓦片索引文件URL
      //const modelPromise = this.AddThreeDTiles(69380); // Cesium Ion Resource
      modelPromise.then((tileset) => {
        console.log("tileset: ", tileset);
        viewer.zoomTo(tileset);
      });
    },
    async AddThreeDTiles(url, option) {
      viewer.scene.globe.depthTestAgainstTerrain = true;
      // ! 写法二:
      let tileset = {};
      if (typeof url == "number") {
        tileset = await Cesium.Cesium3DTileset.fromIonAssetId(url, option);
      } else {
        tileset = await Cesium.Cesium3DTileset.fromUrl(url, option);
      }
      viewer.scene.primitives.add(tileset);
      return tileset; // 返回模型对象
    },
    LoadLocalMapUrl() {
      // viewer.imageryLayers.addImageryProvider(new Cesium.UrlTemplateImageryProvider({
      //       url: "./notes/{z}/{x}/{y}.png",
      //           minimumLevel: 0,
      //           maximumLevel: 11,
      //           rectangle:new  Cesium.Rectangle(Cesium.Math.toRadians(114.32), Cesium.Math.toRadians(36.927),
      //           Cesium.Math.toRadians(114.524), Cesium.Math.toRadians(37.22))
      //   }))
    },
  },
};
</script>
<style lang="scss" scoped>
.CesiumOutbox {
  width: 100%;
  height: 100%;
  position: relative;
  .cesiumContainerbox {
    width: 100%;
    height: 100%;
    overflow: hidden;
  }
  .Btnbox {
    position: absolute;
    top: 15px;
    left: 15px;
    cursor: pointer;
  }
}
</style>

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

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

相关文章

《WebKit 技术内幕》学习之十二(1):安全机制

第12章 安全机制 安全机制对于浏览器和渲染引擎来说至关重要。一个不考虑安全机制的HTML5规范体系肯定不会受到广泛地使用&#xff0c;同时一个不安全的浏览器也不会得到广大用户的青睐。本章介绍的安全机制分成两个不同的部分&#xff0c;第一个部分是网页的安全&#xff0c;…

web 应用常见的安全问题

一xss攻击 人们经常将跨站脚本攻击&#xff08;Cross Site Scripting&#xff09;缩写为CSS&#xff0c;但这会与层叠样式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;的缩写混淆。因此&#xff0c;有人将跨站脚本攻击缩写为XSS。 跨站脚本攻击&#xff…

ubuntu 20.04 使用 webrtc-streamer自动退出,报错GLIBC 问题解决方法

文章目录 前言Ubuntu 20.4中使用webrtc-streamer报错总结 前言 前端vue2 项目需要播放海康的视频流&#xff0c;本地启动起来了&#xff0c;现在需要的服务器上部署&#xff0c;服务器是Ubuntu 20.04&#xff0c;下面是部署时遇到的问题及解决方法&#xff0c;总耗时2天。 不知…

Linux之权限(内容详细,细节满满)

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力 目录 一.前言 二.权限修改的两种方法 …

3.【SpringBoot3】文章分类接口开发

序言 在文章分类模块&#xff0c;有以下接口需要开发&#xff1a; 新增文章分类文章分类列表获取文章分类详情更新文章分类删除文章分类 数据库表字段和实体类属性&#xff1a; 在数据库表中&#xff0c;create_user 来自于 user 表中的主键 id&#xff0c;是用来记录当前文…

使用AFPN渐近特征金字塔网络优化YOLOv8改进小目标检测效果(不适合新手)

目录 简单概述 算法概述 优化效果 参考文献 文献地址&#xff1a;paper 废话少说&#xff0c;上demo源码链接&#xff1a; 简单概述 AFPN的核心思想&#xff1a;AFPN主要通过引入渐近的特征融合策略&#xff0c;逐步整合底层、高层和顶层的特征到目标检测过程中。这种融合…

正信晟锦:亲戚借了钱怎么要回来

亲戚间的金钱借贷&#xff0c;往往是情感与金钱交织的微妙话题。在中国传统文化中&#xff0c;家族关系至关重要&#xff0c;因此处理此类事宜时需要格外细致和谨慎。要回借出的钱&#xff0c;不仅要考虑到资金的回流&#xff0c;更要维护和谐的家庭关系。 沟通是解决问题的关键…

v-for中使用v-model的坑点

问题场景: 有这样一种场景,比如我们需要根据数据创建多个input输入框 <template><div v-for"(item, index) in list" :key"index"><a-input v-model"item"></a-input></div></template><script>expo…

Git--创建仓库(1)

git init Git 使用 git init 命令来初始化一个 Git 仓库&#xff0c;Git 的很多命令都需要在 Git 的仓库中运行&#xff0c;所以 git init 是使用 Git 的第一个命令。 在执行完成 git init 命令后&#xff0c;Git 仓库会生成一个 .git 目录&#xff0c;该目录包含了资源的所有…

别再局限于Android和iOS了尝试鸿蒙APP系统开发吧!

最近&#xff0c;多家互联网公司也发布了鸿蒙OS的App开发工程师的岗位&#xff0c;开启了抢人大战&#xff0c;有的企业开出了近百万的年薪招聘鸿蒙OS工程师&#xff0c;而华为甚至为鸿蒙OS资深架构师开出了100万元—160万元的年薪。 「纯血」鸿蒙开启&#xff0c;欲与 Andori…

css clip-path

1 解释 clip-path 属性使用裁剪方式创建元素的可显示区域。区域内的部分显示&#xff0c;区域外的隐藏。浏览器会裁剪掉裁剪区域以外的内容&#xff0c;包括: 背景&#xff0c;内容&#xff0c;边框&#xff0c;阴影等&#xff0c;另外也不会捕获裁剪区域之外的hover click等事…

《JavaScript权威指南》读书笔记1

服创要开始了&#xff0c;选题基本上都是关于ai的&#xff0c;之前写的项目没有和ai有关的&#xff0c;也没有学习过这方面的知识。现在我们组基本上确认的选题是&#xff1a;【A01】基于文心大模型的智能阅卷平台设计与开发【百度】【A01】基于文心大模型的智能阅卷平台设计与…

用 AI 定制龙年红包封面保姆级教程

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

代码中遇到的问题2

目录 记录: 好处&#xff1a; 问题一&#xff1a; 解答: 问题二: 解答: 常见类型问题: 记录: string connStr ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; 在代码中写上这段代码&#xff0c;将连接数据库的代码语句放到&#xff…

算法练习-替换数字(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;字符串 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…

【GitHub项目推荐--开源2D 游戏引擎】【转载】

microStudio 是一个可在浏览器中运行的游戏引擎&#xff0c;它拥有一套精美、设计精良、全面的工具&#xff0c;可以非常轻松地帮助你创建 2D 游戏。 你可以在浏览器中访问 microStudio.dev 开始搭建你的游戏&#xff0c;当然你可以克隆现有项目或创建新游戏并开始编码&#x…

Go 基本数据

第 2 章 基本数据类型 Go 的数值类型包括了不同大小的整数 、浮点数 、复数&#xff1b; 各种数值类型分别有自己的大小&#xff0c;对正负号支持也各不相同&#xff1b; 1. 整数&#xff08;OK&#xff09; 整数类型&#xff08;整型&#xff09;整数类型Go 语言同时支持 有…

代码随想录算法训练营29期|day28 任务以及具体安排

93.复原IP地址 class Solution {List<String> result new ArrayList<>();public List<String> restoreIpAddresses(String s) {StringBuilder sb new StringBuilder(s);backTracking(sb, 0, 0);return result;}private void backTracking(StringBuilder s,…

VS Code Json格式化插件-JSON formatter

&#x1f9aa;整个文件格式化 按快捷键Shift Alt F &#x1f96a;仅格式化选择内容 需要选择完整的json段落即&#xff1a;{} 或 [] 括起来的部分&#xff0c;再按快捷键Ctrl K F

高分辨率图像合成;可控运动合成;虚拟试衣;在FPGA上高效运行二值Transformer

本文首发于公众号&#xff1a;机器感知 高分辨率图像合成&#xff1b;可控运动合成&#xff1b;虚拟试衣&#xff1b;在FPGA上高效运行二值Transformer Scalable High-Resolution Pixel-Space Image Synthesis with Hourglass Diffusion Transformers We present the Hourgla…