npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

xgis-cesium

v0.2.5

Published

是基于@cesium/engine开发的,结合项目经验积累,进行定制的内部使用版。非商业项目免费使用!

Downloads

447

Readme

xgis-cesium

xgis-cesium是基于@cesium/engine开发的,结合项目经验积累,进行定制的内部使用版。 非商业项目免费使用,商业应用请购买使用授权key。

基于Cesium+Typescript+VUE的三维开发框架

  • v0.2.5 增加本地资源缓存功能,XViewer对象增加enableOfflineCache、disableOfflineCache和clearOfflineCache方法(解决0.1.6版本后CesiumOfflineCache.min.js失效无法使用问题);
  • v0.2.4 修改Tiles3DLoader加载默认不贴地;再次修改模拟飞行的飞机和路径释放的问题;给Overlay增加定位;
  • v0.2.3 修改WFSLoader解析url错误;修改loadWMTSByCapabilities加完图层不定位问题;增加Tiles3DLoader工具类;
  • v0.2.2 修改XViewer释放报错问题;修改添加图层是否触发事件;flyToBounds和zoomToBounds的默认不用视角参数;utils下增加WMTSLoader和WFSLoader工具类,实现解析Capabilities XML加载地图图层;
  • v0.2.1 解决模拟飞行的资源释放问题;空间分析analysis中增加模型压平(createFlatTilesetHelper、flatTileset3D、clearFlatRegion等方法);增加EnableTerrainProviderFlat方法扩展Cesium.CesiumTerrainProvider支持地形压平(需要window.turf);更新依赖库@cesium/engine版本到16.0.0;
  • *v0.2.0 修改bug;增加空间分析功能:通视分析、可视域分析、坡度分析、坡度坡向反向、方量分析、缓冲区分析、淹没分析、地形挖掘、地形剖面分析、模型裁切、区域等高线、多边形叠置分析;XViewer增加了LayerManageEvent事件、onLayerAddManageHandler、onLayerRemoveManageHandler方法来对接图层管理组件;
  • v0.1.9 内部包含@cesium/engine导出Cesium;增加三维标绘标绘符号;
  • v0.1.8 补充部分说明,更新加入API开发文档支持;
  • v0.1.7 更新依赖库版本;增加内置global.jpg和supercluster库;增加版权声明与商业授权控制;
  • *v0.1.6 更新依赖库版本;同步版本;修改依赖@cesium/engine代替cesium;去掉部分对cesium依赖;
  • *v0.1.4 修改getHeading方法计算错误;优化getPitch获取俯仰角方法;增加getRoll获取翻滚角;FlightNaviTool里增加getDirectionAB和getDistancePositionByDirection方法,计算方向和该方向远处的点;
  • v0.1.3 增加设置和获取航向角,并修改相关方法;修改bindEntity方法;增加飞行轨迹墙和显示控制;
  • v0.1.2 增加自由飞行FreeFlyHelper; 完善GameControlHelper,增加翻转角和自动回正等
  • v0.1.1 给XViewer增加相机切换视角方法changeCameraFocus、godView、firstView、followView、freeView; 修改GodView跟随方向;
  • v0.1.0 给Transform补充transformCartesianToCartographic方法;增加Analysis的坡度分析、方量分析等;为XViewer增加CameraFocusHelper视角控制;增加flight模拟飞行控制相关的RouterTrackHelper、GameControlHelper、ViewerEntityHelper、FlightNaviTool;
  • v0.0.8 补充Transform的方法参数类型;为XMath的方法补充参数类型,并增加resample方法和Direction类(用于两点之间的航向、方向、朝向等相关计算);为ParsePosition增加PositionType类型;为XViewer增加拾取点方法getCatesian3ByPick;
  • v0.0.7 ImageType改为EnumImageType,增加EnumBasicLayerName、EnumBasicLayerName;XViewer增加appendBasicLayer方法、getBasicLayers方法,addBasicLayer、setBasicLayer方法增加ImageProviderOptions构建参数(例如:传入{maximumLevel:10}控制最大级别)
  • v0.0.6 解决v0.0.5版本存在问题;更新内置天地图KEY;将部分js代码改为ts
  • v0.0.4 解决drawTool和editTool没有绑定Viewer的问题;补充Viewer的内部Widget;增加XMath、History-Track、HeatMapLayer;
  • v0.0.3 给xviewer增加移除底图方法、destroy、图层容器layerContainer;修改示例编写中发现的问题

核心功能

  • 核心的XViewer是扩展Cesium.CesiumWidget的实现,增加很多基础功能

  • 基础图层管理,支持多种地图底图

  • 图层树管理功能

  • 三维标绘功能

  • 空间分析功能


三维图层管理

三维标绘

可视域分析

模型剖分裁切

坡度坡向计算

模型压平-大雁塔

地形压平

开发文档

API开发文档v0.1.9:https://zorrowm.github.io/api-doc/xgis-cesium-v0.1.9/index.html

开发示例地址:https://3d.gis.digsur.com/#/product/index

安装

npm i xgis-cesium

不用再单独安装@cesium/engine

需要引入类库样式: import 'xgis-cesium/dist/index.css'

使用方法

1、拷贝cesium资源,到public/cesium文件夹

  • 手动拷贝 ./node_modules/xgis-cesium/dist/resources/下资源

    • xgis-cesium/dist/resources/Workers

    • xgis-cesium/dist/resources/ThirdParty

    • xgis-cesium/dist/resources/Assets

  • 使用vite插件 rollup-plugin-copy

    • vite.config.ts里配置
// vite.config.ts
import { defineConfig } from 'vite'
import copy from 'rollup-plugin-copy'

export default defineConfig({
  plugins: [copy({
           targets: [
             //下面为cesium 三维资源的拷贝
             { src: './node_modules/xgis-cesium/dist/resources/Workers', dest: 'public/cesium' }, 
             { src: './node_modules/xgis-cesium/dist/resources/ThirdParty', dest: 'public/cesium' }, 
             { src: './node_modules/xgis-cesium/dist/resources/Assets', dest: 'public/cesium' }, 
           ]
         })],
})
  • 使用quasar.config.ts配置
import { existsSync } from 'fs';

if(!existsSync('public/cesium'))
      {
        defaultPlugins.push(     
         ['rollup-plugin-copy',{
           targets: [
             //下面为cesium 三维资源的拷贝
             { src: './node_modules/xgis-cesium/dist/resources/Workers', dest: '/public/cesium' }, 
             { src: './node_modules/xgis-cesium/dist/resources/ThirdParty', dest: '/public/cesium' }, 
             { src: './node_modules/xgis-cesium/dist/resources/Assets', dest: '/public/cesium' }, 
           ]
         }]);
      }

2、使用XViewer初始化构建球

    import {Cesium,XViewer} from 'xgis-cesium';

//初始化地球
    function initCesiumViewer() {
      //@ts-ignore
      if(!window.CESIUM_BASE_URL)
      {
        //@ts-ignore
        window.CESIUM_BASE_URL='./cesium/';
      }
      try {
        //https://cesium.com/learn/cesiumjs/ref-doc/Viewer.html#.ConstructorOptions
        const viewer = new XViewer('cesiumContainer', {
          animation: false, //是否创建动画小器件,左下角仪表
          baseLayerPicker: false, //是否显示图层选择器
          fullscreenButton: false, //是否显示全屏按钮
          geocoder: false, //是否显示geocoder小器件,右上角查询按钮
          homeButton: false, //是否显示home按钮
          infoBox: false, //是否显示信息框
          sceneModePicker: false, //是否显示3D/2D选择器
          selectionIndicator: false, //是否显示选取指示器组件 鼠标绿色框
          timeline: false, // 是否显示时间轴
          navigationHelpButton: false, // 是否显示右上角的帮助按钮
          vrButton: false, // 是否显示双屏
          scene3DOnly: true, // 如果设置为true,则所有几何图形以3d模式绘制以节约gpu资源
          fullscreenElement: document.body, //全屏时渲染的html元素
          navigationInstructionsInitiallyVisible: false,
          contextOptions: {
            // cesium状态下允许canvas转图片convertToImage
            webgl: {
              alpha: false,
              depth: false,
              stencil: true,
              antialias: true,
              premultipliedAlpha: true,
              preserveDrawingBuffer: true, //通过canvas.toDataURL()实现截图需要将该项设置为true
              failIfMajorPerformanceCaveat: false
            },
            //https://juejin.cn/post/7265042701065437220
            // requestWebgl1: false,
          },
          //https://cesium.com/learn/cesiumjs/ref-doc/CesiumWidget.html?classFilter=CesiumWidget
          //https://cesium.com/blog/2018/01/24/cesium-scene-rendering-performance/
          requestRenderMode: true,//优化性能,需要主动触发更新   scene.requestRender();
          targetFrameRate: 60,
          orderIndependentTranslucency: true,
          automaticallyTrackDataSourceClocks: false,
          dataSources: undefined,
          terrainShadows: Cesium.ShadowMode.DISABLED,
          //是正确的
          baseLayer: false,
          // terrainProvider: await Cesium.createWorldTerrainAsync({
          //      requestVertexNormals: true,
          //      requestWaterMask: true,     // 动态水流
          // }),
          //默认地形-无地形
          terrainProvider: new Cesium.EllipsoidTerrainProvider(),
        });
        viewer.clock.currentTime = Cesium.JulianDate.fromDate(new Date());
        return viewer;
      }
      catch (error) {
        Global.Message.err('Cesium Viewer初始化失败!');
        Global.Logger().error('Cesium Viewer初始化失败', error);
      }
      return undefined;
    }

3、调用开发示例

      Global.CesiumViewer = initCesiumViewer();
      if (Global.CesiumViewer) {
        const xviewer = Global.CesiumViewer as XViewer;
      //   const terrain = TerrainFactory.createUrlTerrain({
      // url: 'http://data.marsgis.cn/terrain'
      // });
   
      //   //地形
      //   xviewer.setTerrain(terrain);
        //默认单张图片,作为底图
        xviewer.setBasicLayer('ARCGIS_IMG');
        // xviewer.flyToPosition(new Position(116.2698, 36.3475, 203,5.69,-26.2,360));
       
        // xviewer.Weather.rain.enable=true;
        // setTimeout(() => {
        //   xviewer.Weather.rain.destroy();
        //   xviewer.scene.requestRender();
        // }, 5000);
      }

4、三维应用示例

更多示例

基础示例:https://3d.gis.digsur.com/#/product/apiexamples?wid=imageBaseLayerWidget

5、 空间分析—示例代码

大部分空间分析功能需要使用turf库,需要单独引用最新的 turf.min.js

  • 初始化Analysis 对象:

    if (Global.CesiumViewer) {
     viewer = Global.CesiumViewer;
     analysisHelper = new Analysis(viewer);
     }
  • 方量分析:

    analysisHelper.volumeAnalysis(res=>{
              // console.log('输出统计结果:',res)
              if(res)
              {
                planeHeightRef.value=res.planeHeight;
                wallMinHeightRef.value=res.wallMinHeight;
                wallMaxHeightRef.value=res.wallMaxHeight;
              }
            });
  • 区域等高线

        analysisHelper.calculateContourLines(100);
  • 缓冲区分析

function shapeChanged(value, evt) {
  switch (value) {
    case 'point':
      if (analysisHelper)
        plotHelper.draw(EnumPoltType.POINT, (data) => {
          // console.log(data,'point111111111111111')
          analysisHelper.bufferPoint(data.position, bufferRadius.value);
        }, undefined);
      break;
    case 'line':
      if (analysisHelper)
        plotHelper.draw(EnumPoltType.POLYLINE, (data) => {
          analysisHelper.bufferPolyline(data.positions, bufferRadius.value);
        }, undefined);
      break;
    case 'polygon':
      if (analysisHelper)
        plotHelper.draw(EnumPoltType.POLYGON, (data) => {
          analysisHelper.bufferPolygon(data.positions, bufferRadius.value);
        }, undefined);
      break;
  }
}
  • 叠置分析(多边形)
/**

 * 两个面叠置分析
 * @param value 
 * @param evt 
   */
   function doTurfAnalysis() {
     if (!poly1 || !poly2) {
   Global.Message.warn('必须绘制两个面,不能为空!')
   return;
     }

  if (analysisHelper) {
    switch (turfMethod.value) {
      case 'intersect': //相交
        analysisHelper.intersectByTurf(poly1, poly2);
        break;
      case 'union':
        analysisHelper.unionByTurf(poly1, poly2);
        break;
      case 'defference':
        analysisHelper.differenceByTurf(poly1, poly2);
        break;
    }

  }
}
  • 坡度坡向分析
function doSlopeAndAspect() {
  if (analysisHelper)
    analysisHelper.calculateSlopeAndAspect(cellWidth.value, arrowSize.value, 			maxCellSize.value);
}
  • 可视域分析

        analysisHelper.viewShedAnalysis();
  • 多边形裁切模型

    function doPolygonClipping() {
        const targetTileset = Global.Tileset3D ?? tilesetResult;
        if (analysisHelper) {
          analysisHelper.clipTilesetByPolygon(targetTileset, innerClipRef.value);
        }
    }
  • 模型压平

    const flatNumRef=ref<number>(-30);
    function doFlatModel()
    {
      
      if(!flatTool)
      flatTool=analysisHelper.createFlatTilesetHelper(tilesetResult,0);
        
      analysisHelper.flatTileset3D(flatNumRef.value,undefined,id=>{
          currentID=id;
      });
    }
    function clearFlatModel()
    {
      if(currentID)
      {
          analysisHelper.clearFlatRegion(currentID);
      }
    }

6、 地形压平—示例代码

调用EnableTerrainProviderFlat实现扩展Cesium.CesiumTerrainProvider支持地形压平,需要window.turf对象不为空。参考实现:https://juejin.cn/post/7350624030464180234

import { XViewer, Cesium,TerrainFactory,EnableTerrainProviderFlat } from 'xgis-cesium';

//初始化地形
        EnableTerrainProviderFlat();
        const terrain = TerrainFactory.createUrlTerrain({
          url: 'http://data.marsgis.cn/terrain'
          });
      //地形
       xviewer.setTerrain(terrain);

地形压平的功能应用代码:

function doFlatModel()
{
    if(plotHelper)
    plotHelper.draw(EnumPoltType.POLYGON, (data) => {
        console.log(data.positions,'positions0000000000');
        const polygon=Parse.parsePolygonCoordToArray(data.positions, true)
         const terrainFlat= viewer.scene.terrainProvider;
        if(terrainFlat)
        {
          uid=uuid();
         terrainFlat.addTerrainEditsData(uid,polygon,0);
        }
        }, undefined);
}
function clearFlatModel()
{
  if(uid)
  {
    const terrainFlat= viewer.scene.terrainProvider;
    if(terrainFlat)
    {
      terrainFlat.removeTerrainEditsData(uid);
    }
  }
}

版权声明

xgis-cesium是基于cesium扩展的三维GIS开发框架库

版权所有 (c) 2025-2030 保留所有权利。

开发作者:zorrowm@126.com

NPM地址:https://www.npmjs.com/package/xgis-cesium

授权声明:

1.允许免费在非商业项目中使用,需保留授权信息输出和版权logo;

2.未经商业授权的免费使用中的出现任何问题,我方无需负责;

3.我方只对商业授权版本用户提供技术支持;

4.我方保留对此版权信息的最终解释权。

未经授权,禁止对包篡改和移除版权声明输出!