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 🙏

© 2026 – Pkg Stats / Ryan Hefner

integrated-gis-manager

v0.1.5

Published

A library for managing integrated GIS map functionalities.

Readme

智能矿区 GIS 管理系统

版本 Vue Cesium Vite

基于 Vue 3 + Cesium + Element Plus 构建的三维矿区地理信息系统,提供矿区图层管理、巷道可视化、POI 标注、实体绘制、测量工具等功能。


📋 功能特性

🗺️ GIS 核心功能

  • 三维地图展示 - 基于 Cesium 的 3D 地球可视化
  • 矿区管理 - 多矿区切换、矿区边界显示
  • 图层管理 - WMS/WFS 图层加载、显隐控制、透明度设置
  • 巷道显示 - 巷道面渲染、中心线显隐控制、动态标签
  • 采空区管理 - 采空区多边形渲染、分级标签显示
  • 中心线插值 - 🆕 在巷道中心线上两点间插值,生成采样点并保存到数据库

🖱️ 交互功能

  • POI 点管理 - 添加/编辑/删除 POI 点、表单编辑
  • 实体绘制 - 绘制点、线、面,临时实体管理
  • 测量工具 - 距离测量、面积测量
  • 实体选择 - 点击选择、属性查看编辑
  • 坐标拾取 - 支持投影坐标 (EPSG:3857) 和经纬度 (EPSG:4326) 切换

⚙️ 高级功能

  • GeoServer 集成 - WFS 服务对接、图层发布、属性查询
  • 动态标签 - 基于相机高度/比例尺的智能标签缩放与显隐
  • 相机约束 - 限制相机视角范围、灵敏度控制
  • 渲染质量控制 - FXAA/MSAA 抗锯齿、分辨率缩放配置

🛠️ 技术栈

| 类别 | 技术 | 版本 | |------|------|------| | 前端框架 | Vue | 3.4.21 | | 构建工具 | Vite | 5.2.7 | | 3D GIS 引擎 | Cesium | 1.116.0 | | UI 组件库 | Element Plus | 2.11.7 | | HTTP 客户端 | Axios | 1.10.0 | | 地理计算 | Turf.js | 7.2.0 | | 坐标转换 | Proj4 | 2.19.5 | | 字体解析 | OpenType.js | 1.3.4 |


🚀 快速开始

环境要求

  • Node.js >= 16.0.0
  • npm >= 8.0.0

安装依赖

npm install

启动开发服务器

npm run dev

启动后自动打开浏览器访问 http://localhost:5173

构建生产版本

npm run build

构建产物输出到 dist/ 目录

预览生产版本

npm run preview

⚙️ 配置说明

配置文件位于 public/config/index.js,主要配置项:

window.config = {
  // Cesium Ion 令牌(必须配置)
  cesiumIonToken: "your_cesium_ion_token",
  
  // GeoServer 配置
  geoserver: {
    url: "/geoserver",           // GeoServer 服务地址
    workspace: "mining_gis",     // 工作空间名称
    username: "admin",           // 用户名
    password: "geoserver",       // 密码
    namespaceUri: "http://..."   // 命名空间 URI
  },
  
  // 数据库配置(PostgreSQL)
  database: {
    host: "localhost",
    port: 5432,
    database: "mining_gis",
    username: "mining_user",
    password: "your_password"
  },
  
  // 渲染质量配置
  render: {
    fxaa: false,           // FXAA 抗锯齿开关
    msaa: 8,               // MSAA 采样数:2/4/8/16
    resolutionScale: null  // 分辨率缩放:null=跟随系统DPI
  }
}

📁 项目结构

mk-gis-map-master/
├── index.html                 # HTML 入口
├── package.json               # 项目配置
├── vite.config.js             # Vite 构建配置(含 GeoServer 代理)
├── README.md                  # 项目说明
│
├── public/                    # 静态资源
│   ├── config/
│   │   └── index.js           # 全局配置文件 ⭐
│   └── fonts/                 # 字体文件
│
└── src/                       # 源代码
    ├── App.vue                # 根组件
    ├── main.js                # 应用入口
    ├── style.css              # 全局样式
    │
    └── test2/                 # 核心 GIS 模块 ⭐
        ├── components/
        │   └── IntegratedGISMap.vue      # 集成 GIS 地图组件
        └── lib/
            └── integrated-gis-manager.js # GIS 管理器核心类

核心文件说明

| 文件 | 说明 | |------|------| | IntegratedGISMap.vue | 主地图组件,包含 UI 界面、图层控制、绘制工具、测量工具等 | | integrated-gis-manager.js | GIS 管理器类,封装 Cesium 操作、图层管理、实体绘制、WFS 交互等核心逻辑 |


🔧 开发环境配置

推荐 IDE

GeoServer 代理

开发环境通过 Vite 代理访问 GeoServer:

// vite.config.js
proxy: {
  '/geoserver': {
    target: 'http://localhost:8080',
    changeOrigin: true
  }
}

📝 NPM 脚本

| 命令 | 说明 | |------|------| | npm run dev | 启动开发服务器 | | npm run build | 构建生产版本 | | npm run preview | 预览构建产物 |


📦 NPM 包使用

安装

npm install integrated-gis-manager

# 安装 peerDependencies
npm install cesium vue element-plus @element-plus/icons-vue cesium-navigation-es6

基础使用

import { IntegratedGISManager } from 'integrated-gis-manager'

// 创建实例
const gisManager = new IntegratedGISManager('#cesiumContainer', {
  geoServerUrl: '/geoserver',
  workspace: 'mining_gis',
  username: 'admin',
  password: 'geoserver',
  debug: true
})

// 初始化
await gisManager.init()

配置项

| 配置项 | 类型 | 默认值 | 说明 | |--------|------|--------|------| | geoServerUrl | string | /geoserver | GeoServer 服务地址 | | workspace | string | mining_gis | 工作空间名称 | | username | string | admin | GeoServer 用户名 | | password | string | geoserver | GeoServer 密码 | | debug | boolean | true | 调试模式 | | wfsVersion | string | 1.1.0 | WFS 版本 | | vectorLabelBaseFontSize | number | 12 | 矢量标签基础字体大小 | | tunnelPolygonVisibilityThreshold | number | 1000 | 巷道面显示高度阈值(米) |

API 方法

初始化与销毁

await gisManager.init()              // 初始化地图
gisManager.viewer.destroy()          // 销毁实例

图层操作

// 加载单个图层
await gisManager.loadLayer(miningAreaId, layerTypeId)

// 加载矿区所有图层
await gisManager.loadAllLayersForArea(miningAreaId)

// 获取所有可用图层
const layers = await gisManager.getAllLayers()

// 设置图层可见性
gisManager.setLayerVisibility(miningAreaId, layerTypeId, true)

// 清除所有图层
gisManager.clearAllLayers()

// 刷新图层
await gisManager.refreshLayer(miningAreaId, layerTypeId)

飞行与定位

// 飞行到矿区
await gisManager.flyToMiningArea(miningAreaId)

// 设置默认视图
gisManager.setDefaultView()

// 设置相机约束
gisManager.setupCameraConstraints(bounds, multiplier)

绘制工具

// 绘制点
gisManager.startDrawingPoint()

// 绘制线
gisManager.startDrawingLine()

// 绘制面
gisManager.startDrawingPolygon()

// 绘制 POI 点
gisManager.startDrawingPOI()

// 停止绘制
gisManager.stopDrawing()

测量工具

// 距离测量
gisManager.startMeasureDistance()

// 面积测量
gisManager.startMeasureArea()

// 清除测量结果
gisManager.clearMeasure()

实体管理

// 获取临时实体
const entities = gisManager.getTemporaryEntities()

// 删除临时实体
gisManager.removeTemporaryEntity(entityId)

// 清除所有临时实体
gisManager.clearTemporaryEntities()

中心线控制

// 获取中心线可见性
const visible = gisManager.getCenterlineVisibility(miningAreaId)

// 设置中心线可见性
gisManager.setCenterlineVisibility(miningAreaId, true)

// 切换中心线显隐
gisManager.toggleCenterlineVisibility(miningAreaId)

// 获取中心线数量
const count = gisManager.getCenterlineCount(miningAreaId)

中心线插值 (新增功能)

在巷道中心线上选择两点,按指定间隔生成插值点,并保存到数据库。

// 1. 获取所有中心线坐标
const centerlines = gisManager.getAllCenterlineCoordinates(miningAreaId)

// 2. 执行插值计算
const pointA = { name: '起点A', coordinates: [108.123, 34.456] }
const pointB = { name: '终点B', coordinates: [108.234, 34.567] }
const interval = 10 // 插值间隔(米)

const result = gisManager.interpolateCenterline(
  pointA,
  pointB,
  centerlines[0].coordinates,
  interval
)

// result 包含:
// - success: boolean 是否成功
// - points: Array 插值点数组
// - geometry: Object MultiPoint GeoJSON 几何对象
// - totalDistance: number 总距离(米)

// 3. 预览插值点(可选)
const previewIds = gisManager.previewInterpolationPoints(result, {
  pointColor: Cesium.Color.LIME,
  pointSize: 8,
  showLabels: true
})

// 4. 清除预览
gisManager.clearInterpolationPreview(previewIds)

// 5. 保存到数据库
await gisManager.saveInterpolationPoints(result, miningAreaId)

// 6. 交互式选点模式
const controller = gisManager.startCenterlinePointSelection(
  miningAreaId,
  (pointInfo, index) => {
    console.log(`已选择第 ${index} 个点:`, pointInfo)
  },
  (allPoints) => {
    console.log('选点完成:', allPoints)
  }
)

// 取消选点
controller.cancel()

连接诊断

// 测试 GeoServer 连接
const result = await gisManager.testConnection()

// 诊断连接问题
const diagnosis = await gisManager.diagnoseGeoServerConnection()

事件回调

// 实体创建回调
gisManager.onEntityCreated = (entityData) => {
  console.log('新实体创建:', entityData)
}

// 实体选择回调
gisManager.onEntitySelected = (entity) => {
  console.log('选中实体:', entity)
}

// 临时实体添加回调
gisManager.onTemporaryEntityAdded = (entity) => {
  console.log('临时实体已添加')
}

// 坐标轴顺序解析回调
gisManager.onAxisOrderResolved = (axisOrder) => {
  console.log('坐标轴顺序:', axisOrder)
}

Vue 组件示例

<template>
  <div id="cesiumContainer" style="width: 100%; height: 100vh;"></div>
</template>

<script setup>
import { onMounted, onUnmounted, ref } from 'vue'
import { IntegratedGISManager } from 'integrated-gis-manager'

const gisManager = ref(null)

onMounted(async () => {
  gisManager.value = new IntegratedGISManager('#cesiumContainer', {
    geoServerUrl: '/geoserver',
    workspace: 'mining_gis'
  })
  
  // 设置回调
  gisManager.value.onEntityCreated = (data) => {
    console.log('创建实体:', data)
  }
  
  await gisManager.value.init()
})

onUnmounted(() => {
  if (gisManager.value?.viewer) {
    gisManager.value.viewer.destroy()
  }
})
</script>