使用开源技术搭建一套轻量化二维+三维GIS系统技术选项

摄影测量学实战:从无人机照片到三维建模与GIS分析全流程 摄影测量学是通过影像恢复物体几何信息的技术,多以无人机航拍照片为基础,经由图像处理、三维建模和GIS分析构成完整工作流。其原理是从多视角影像中提取特征点并进行匹配,生成点云与三维模型,再结合地理坐标实现空间量测与成果表达。这项技术为测绘工程、数字孪生、资源调查等领域提供了高效的数据获取与处理手段,尤其在无法人工实测的区域,能够快速生成正射影像、DSM及矢量地形数据。围绕摄影测量学、三维建模与GIS集成的完整链路,这条基于开源工具的从照片采集、特征提取、模型生成到矢量化分析的实操路径,可帮助相关从业者建立可落 阅读详情

相信很多大佬有不少技术路线,本文讲的可能是比较常见的一种。

用到的关键组件:

  1. GeoServer(入门会用)
  2. Curl(入门会用)
  3. QGIS(入门会用)
  4. LeafLet/OpenLayers/Mapbox之一(入门会用)
  5. Cesiumjs(入门会用)
  6. Postgresql+PostGIS
  7. SLD(初步了解)
  8. obj2gltf
  9. Nodejs

按照这样一个流程来从业务数据转换到最后发布二维地图:

二维发布

三维发布

空间分析

从零开始:如何用GISBox免费搭建你的第一个三维瓦片地图服务 本文详细介绍了如何利用GISBox免费工具从零开始搭建三维瓦片地图服务。通过分步指南,涵盖数据处理、三维瓦片生成、服务发布及与Cesium前端集成的完整流程,帮助个人开发者和小团队低成本实现三维地理可视化与数字孪生应用。 阅读详情

相关推荐

【板栗糖GIS】轻量3D格式转换利器—CADExchanger核心功能与GIS应用解析

本文深入解析了CADExchanger作为轻量级3D格式转换工具的核心功能及其在GIS领域的应用。文章详细介绍了软件广泛的格式支持(如.dae, .obj, .dwg, .ifc)、模型查看与检查、批处理等实用特性,并提供了清晰的安装教程。针对三维城市模型整合、地质可视化、BIM与GIS融合等典型场景,阐述了如何利用该工具高效解决三维数据互操作难题,打破数据孤岛。

weixin_29261711的博客 355

(转)PostGIS+QGIS+GeoServer+OpenLayers实现数据的存储、服务的发布以及地图的显示...

http://blog.youkuaiyun.com/gisshixisheng/article/details/41575833 标题比较长,主要呢是实现以下几点: 1、将shp数据导入到PostGIS中; 2、Geoserver发布WMS服务; 3、Openlayers调用Wms服务 首先,下载安装软件。 为方便大家下载,我将所有软件上传的百度网盘里了,有需要的可以上网盘直接下...

583

【C++】开源:CGAL计算几何库配置使用

CGAL配置使用

DevFrank的博客 2544

搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3

Web GIS系列: 搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 使用GeoServer+QGIS发布WMTS服务 使用GeoServer+OpenLayers发布和调用WMTS、Vector Tile矢量切片服务 Leaflet入门:添加点线面并导入GeoJSON数据 1 服务器搭建 使用To...

weixin_30542079的博客 671

GIS系列(五)开源三维框架Cesium的介绍和使用

开源的二维地图前端框架有很多,但是三维框架基本上就只有cesium了。 这话说的可能有点绝对,但事实就是这样,目前为止互联网开源地图三维 框架屈指可数,cesium独当一面。 那么,本文我们来谈谈cesium和它的使用。 cesium的底层基于webGL,啥叫webGL?网络图形语言,就是指互联网如何绘制传输操作图形的语言。我们知道C/S端有开放图形语言open GL,web GL可以看作是它的网络版本 webGL所能操作的图形和场景是三维的,什么意思,就是除了能绘制矩形以外,还能绘制长方体。因此c

lz5211314121的博客 9751

【轻量 Web 架构三维 GIS 平台】

本文探讨了人生经验的重要性,强调早悟经验可少走弯路。随后系统梳理了开源与商业Web三维框架,涵盖CesiumJS、Mars3D、deck.gl等开源工具及超图、南方测绘等国产平台,对比其适用场景与技术特点,助力开发者高效选型,提升项目效率。

【优快云】 23

三维 GIS 引擎该用什么?结合目前主流引擎进行分析

相信大多数人在谈到三维 GIS 引擎时,第一个想到的首先是 CesiumJS,CesiumJS 以其免费开源的特点,快速占领了三维 GIS 这个领域,同时也催生了许多以 CesiumJS 为基础的衍生产品。

Shanhaibi的博客 2756

深入解析TI C2000 ePWM模块:峰值电流模式Buck与LLC谐振变换器实战配置

脉宽调制(PWM)技术是电力电子与数字电源控制的核心,它通过调节开关信号的占空比或频率,实现对功率变换器输出电压、电流的精确控制。其基本原理是利用微控制器内部的定时器和比较器,生成具有特定时序的方波信号,驱动功率开关器件。这项技术的核心价值在于将复杂的模拟控制环路数字化,从而提升系统的可控性、灵活性和可靠性。在电机驱动、不间断电源(UPS)、服务器电源和新能源逆变器等广泛应用场景中,PWM技术都是实现高效能量转换的基石。本文聚焦于德州仪器(TI)C2000系列微控制器中功能强大的增强型PWM(ePWM)模块

weixin_30410119的博客 345

三维gis 开源软件有哪些_BIM+GIS的八大难点以及应对方法

BIM与GIS的跨界融合,使微观领域的BIM信息与宏观领域的GIS信息实现交换和互操作,提升了BIM 应用深度,将BIM的应用从单体延伸到建筑群甚至城市级,为GIS行业发展带来了新的契机,同时也带来了一些新的挑战。面对挑战,GIS基础平台要具备哪些能力?本文将剖析BIM+GIS应用过程中遇到的难点以及应对方法。在GIS平台中加载立交桥的BIM数据(左),并叠加在影像数据上(右)挑战一:将BIM数据...

weixin_39634237的博客 816

zedboard(5)spi轮询和中断

一个SPI可以有几个从设备 在程序中使用 s32 XSpiPs_SetSlaveSelect(XSpiPs *InstancePtr, u8 SlaveSel) 选择。其实就是吧对应设备的ss拉低。 备注:只选一个ss,可以不用指定。(感觉,还没测试) 这是xspips.c中定义的函数,发送和接收有 XSpiPs_Transfer 和 XSpiPs_PolledTransfer 两个函数,分别采用中断和轮询模式。    一、轮询模式 米联客参考代码,SpiPs_Init中部分和官方例程流程一样,Spi

Kiss丶小坏 5890

Open3D:读写点云与可视化(C++)

迭代 //Open3D #include "Open3D/Open3D.h" //Eigen #include "Eigen/Dense" void testOpen3D::xjGetInformation(const QString &pcPath) { /* read PC */ auto cloud_ptr = std::make_shared<open3d::geometry::PointCloud>(); if (!open3d::io::ReadPointCl

累了就要打游戏 1万+

三维gis 开源软件有哪些_如何看待BIM与GIS的整合

BIM与GIS的跨界整合,使微观领域的BIM信息内容与宏观领域的GIS信息内容完成互换和互操作,提高了BIM运用深度,将BIM的运用从单体拓宽到建筑群乃至城市级,为GIS行业发展提供了新的突破口,另外也提供了一些新的挑战。应对挑战,GIS基本服务平台要具有什么工作能力?文中将分析BIM+GIS(ztmapinfo.com.)运用过程中碰到的难题及其解决方式 。在GIS平台中载入高架桥的BIM数据(...

weixin_39983912的博客 511

ESP32-S3数字麦克风入门:手把手教你用Arduino IDE读取MSM261S4030H0R的I2S数据

本文详细介绍了如何使用Arduino IDE读取MSM261S4030H0R数字麦克风的I2S数据,涵盖硬件连接、代码编写和数据可视化全流程。重点解决I2S引脚配置、环境噪声过滤和声波观察等实际问题,适合ESP32-S3开发者快速上手数字麦克风应用。

weixin_26742753的博客 318

从DEM到三维地形:用PLY、OBJ、glTF构建GIS可视化模型

通过从DEM生成PLY白模、OBJ纹理模型到glTF标准资产的完整代码示例,系统揭示了三维GIS模型构建的核心原理与技术演进。

Charlee44的技术驿站 1131

DeepSeek Harness“一切皆插件”核心机制详解

DeepSeek Harness 的“一切皆插件”核心 = Cordis 微内核 + 服务化能力接口 + 声明式依赖注入 + 类型化事件 + 可逆副作用 + 配置层 Profile/Bundle/Patch 组合。它的工程收益是:把模型、工具、循环、存储、UI 等所有 Agent 能力都变成“可从配置替换、可干净装卸”的单元,而不是写死在框架里。

软件行业技术文化交流。 598

Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))

1. Hugging Face是什么,提供了哪些内容 2. Hugging Face模型的使用(Transformer类库) 3. Hugging Face数据集的使用(Datasets类库)

iioSnail的博客 8万+

GISBox与QGIS全方位对比:轻量化国产工具与开源专业GIS软件评测

综合来看,GISBox与QGIS并非替代关系,而是互补适配、各有所长的两款GIS工具,核心差异源于产品定位的本质区别。GISBox是本土化轻量化实用工具,以低门槛、高效率、三维处理强、适配国产环境为核心优势,主打快速落地、轻量化作业,完美适配新手入门、日常办公、中小型三维项目交付等场景,解决了国内用户GIS工具使用繁琐、三维处理低效、水土不服的痛点。

m0_69539167的博客 69

【DRAM存储器四十六】LPDDR5介绍--基本操作之行操作、读、写

简述LPDDR5的行操作和读写时序

highman110的博客 761

主流GIS工具TOP5盘点:二三维GIS软件功能特点与场景分析

五大GIS工具各有差异化优势,适配不同层级、不同场景的GIS应用需求。GISBox聚焦三维轻量化处理、一站式服务发布,是数字孪生与倾斜摄影场景的高效工具;ArcGIS主打全场景专业商用能力,适配大型高端工程项目;SuperMap依托国产化优势,深耕国内政务与实景三维建设领域;QGIS以免费开源、灵活易用的特点适配轻量化基础应用与个人开发场景;GRASS GIS则凭借专业的栅格与模拟能力,深耕地理科研与生态分析领域,用户可根据项目需求、应用场景、成本预算灵活选型。

m0_69539167的博客 254

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1371

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

新手选GISBox,专业用QGIS?两款GIS软件对比

综合来看,GISBox与QGIS各有所长,精准匹配不同用户群体与业务场景。如果您是零基础新手、非GIS专业从业者,或是从事数字孪生、实景三维等需要处理三维数据的工作,追求轻量化、易上手、本土化适配的工具,那么GISBox无疑是更优选择,其零门槛部署、全中文交互、强大的三维数据处理能力,能让您快速高效地完成工作。而如果您是专业GIS从业者、科研人员或开发团队,需要进行复杂空间分析、深度二次开发,那么QGIS凭借其开源生态、专业功能和丰富的学习资源,更能满足您的深度需求。

m0_69539167的博客 233

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

GISBox vs Global Mapper:从三维发布到地形分析,谁更懂你的GIS需求?

随着地理信息产业的快速发展,GIS软件在各行各业的应用日益广泛。本文将对两款主流GIS工具——GISBox和Global Mapper进行全面对比分析,从核心定位、功能优缺点及适用场景等方面展开。

m0_69539167的博客 526

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

2026年GIS入门软件怎么选?ArcGIS、QGIS、GISBox等工具详解

在GIS工程项目、实景三维建模、数字孪生开发、测绘数据生产中,软件选型直接决定项目效率与成果质量。市面上GIS工具分为国际商用、开源免费、国产自主三大类,不同软件的擅长领域差异极大。很多新手、甚至从业多年的工程师依然会出现“软件用错、流程返工、服务部署困难”的问题。本文结合真实项目经验,整理当前行业最常用的。

m0_69539167的博客 399

GIS前端主流新技术(2026最新全景)

文章摘要: 本文系统梳理了2026年WebGIS技术全景,涵盖七大核心板块:1)底层图形渲染以WebGPU为核心,替代WebGL实现性能飞跃;2)二维GIS前端开源生态成熟,矢量瓦片标准统一化;3)三维GIS依托3D Tiles 2.0规范,支持高斯泼溅等新型数据;4)AI深度融入GIS,实现自然语言交互与AIGC生成;5)工程化与主流框架深度集成,优化构建与组件化方案;6)OGC新协议简化数据交互;7)跨端适配鸿蒙、Flutter等平台。文章还分析了商业平台技术亮点,并给出技术学习优先级路线,强调WebG

大剑师兰特的GIS世界 790

2026年5款GIS软件选型指南,新手小白必看

随着地理信息产业的快速发展,GIS(地理信息系统)软件已成为城市规划、自然资源管理、数字孪生、测绘工程等领域不可或缺的核心工具。目前市面GIS产品种类繁多,不同工具的功能定位、适用场景和成本差异显著,选型不当极易造成资源浪费或项目效率下降。本文梳理了当前市场上5款主流GIS软件的核心特点、优缺点及适配人群,帮助不同需求的用户快速找到最适合自己的工具。

m0_69539167的博客 135

10款免费+商用GIS工具详解,从轻量化到专业级全覆盖

GIS 软件的选择通常没有统一答案。不同工具在空间分析、测绘制图、三维场景、点云处理和国产化适配上的侧重点并不一样。下面整理了几款常见软件,适合结合自己的使用场景做初步判断。

m0_69539167的博客 701
上一篇: 微服务:10.Spring Cloud 服务集中配置时的SearchPaths设置
下一篇: ArcGIS中的土地利用变化分析
丷丩
丷丩 优质创作者: 数据科学与机器学习技术领域 优质创作者: 数据科学与机器学习技术领域
博客等级 码龄18年 1万+粉丝 317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丷丩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值