GIS应用:使用编程学习快速开发REST地图服务

在现代社会中,地理信息系统(GIS)在各个领域中起着重要的作用。它们被广泛应用于城市规划、环境管理、农业、交通等领域。为了有效地利用地理空间数据,开发人员可以通过编程学习来快速开发REST地图服务,使其能够提供丰富的地理信息功能。本文将介绍如何使用编程学习来实现这样的地图服务,并提供相应的源代码。

首先,我们需要选择一个合适的编程语言和框架来开发REST地图服务。在GIS领域中,常用的编程语言包括Python、JavaScript和Java等。这里我们选择使用Python语言和Flask框架来实现REST地图服务。

接下来,我们需要准备地理空间数据。常见的地理空间数据格式包括Shapefile、GeoJSON和KML等。在本例中,我们以GeoJSON格式的地理空间数据为例。假设我们有一个名为"map.geojson"的文件,其中包含了一些地理要素的几何信息和属性数据。

下面是一个使用Python和Flask框架编写的简单示例代码,用于实现REST地图服务:

from flask import Flask, jsonify

app = Flask(__name__)

离线矢量(要素)地图服务 百度地图、高德地图、天地图等都提供查询地名、地址、道路等地图开发接口,如果在内网要使用这些服务是不可能的。所以,一般都通过地图下载器能把百度地图、高德地图的地图切片下载并在内网发布,但如果需要访问查询地名的操作,则需自己搭建GIS要素服务。一般操作如下: 1.数据:创建地名、地址、道路等图层,可以是文件Shapefile或者导入到空间数据库(如PostGreSQL、SQLServer Spati... 阅读详情

相关推荐

从零到发布:用SuperMap iServer 10i在Windows上快速搭建你的第一个GIS地图服务

本文详细介绍了如何在Windows系统上使用SuperMap iServer 10i快速搭建GIS地图服务,从环境准备、安装配置到许可设置和首个地图服务的发布。重点解析了许可配置的常见问题及解决方案,帮助用户顺利启动服务并理解关键概念,适合GIS服务发布的初学者。

weixin_30430169的博客 315

SuperMap iServer 2024 快速发布地图服务:3分钟完成工作空间到REST服务部署

本文详细介绍了SuperMap iServer 2024快速发布地图服务的全流程,从环境准备到服务部署仅需3分钟。通过优化配置和性能调优,帮助GIS工程师高效完成工作空间到REST服务的转换,提升地图服务发布效率。文章还涵盖了服务验证、监控及常见问题解决方案,适用于各类GIS项目部署需求。

weixin_34199764的博客 241

从零到发布:用SuperMap iServer 10i/11i在Windows上快速搭建你的第一个GIS地图服务

本文详细介绍了如何在Windows系统上使用SuperMap iServer 10i/11i快速搭建GIS地图服务。从软件安装、许可配置到地图数据准备和服务发布,提供全流程实战指南,帮助用户快速掌握GIS服务部署技巧,特别适合GIS初学者和开发人员。

weixin_33726313的博客 381

地图二维三维的Web开发

地图二维三维的Web开发涉及到多种编程语言、框架和工具,例如Web前端技术、地图框架、Web后端技术、数据库系统、GIS服务器软件等。地图二维三维的Web开发是一个不断发展和创新的领域,随着技术的进步和用户的需求,未来将会出现更多的新技术和新应用,为人们提供更加丰富和便捷的地理信息服务。这种基于Web技术和GIS技术的应用开发,称为地图二维三维的Web开发。地图二维三维的Web开发具有跨平台、易部署、易扩展、易集成等优点,可以满足不同领域和场景的地理信息需求,例如城市规划、交通导航、旅游景点、环境监测等。

Sun_shine99的博客 1192

Unity集成SuperMap在线服务开发三维GIS应用实践

三维GIS开发是数字孪生和智慧城市建设中的关键技术,通过将地理信息系统与实时渲染引擎结合,可以实现空间数据的可视化分析与交互。Unity作为跨平台游戏引擎,其强大的渲染管线和完善的物理系统为GIS应用提供了理想的开发环境。SuperMap作为国产GIS平台代表,其在线地图服务包含丰富的地理空间数据资源。在工程实践中,开发者常需要将两者结合,实现动态地图加载、空间查询、数据叠加等核心功能。通过合理的SDK集成和性能优化策略,可以构建出既保持GIS专业特性又具备良好用户体验的三维应用。本文以智慧园区项目为例,详

weixin_33391446的博客 283

5分钟用Leaflet快速加载天地图与ArcGIS在线地图服务

瓦片地图服务(TMS)是现代Web地图应用的核心技术,它通过将大范围地图按层级切割为标准化瓦片,实现了地图数据的快速加载与流畅交互。其原理基于XYZ规范,通过HTTP请求动态获取并拼接瓦片,从而支撑起从全球到街区的多尺度可视化。这一技术为GIS开发、位置服务与空间数据分析提供了高效的基础设施。在工程实践中,Leaflet作为轻量级JavaScript库,因其简洁的API与强大的扩展性,成为快速集成各类在线地图服务的首选工具。本文聚焦于国内开发者高频接触的天地图(基于GCJ-02坐标系)与ArcGIS Onl

weixin_29213655的博客 471

历史地图数据化实战:从GeoJSON到交互式Web应用开发

地理信息系统(GIS)通过矢量数据和栅格数据模型,将地理空间信息转化为可计算、可分析的结构化数据。其核心原理在于利用点、线、面等几何要素及其属性表,精确描述地理实体的空间位置与特征。这一技术价值在于,它使得传统静态地图转变为动态、可编程的数据服务,极大地拓展了空间分析的应用边界。在数字人文、历史地理信息系统(HGIS)等领域,GIS技术为历史疆域变迁的可视化与分析提供了强大支撑。通过将历史地图矢量化,并采用GeoJSON等通用数据格式,开发者可以构建出支持时空查询与交互的可编程历史空间数据层。本文聚焦于历史

weixin_34236869的博客 341

SuperMap iClient for JavaScript 快速入门

开发工具与关键技术: 作者:何钦波 撰写时间:2020/ 5 / 28 SuperMap iClient for JavaScript 快速入门 主要内容 一、资源概述 二、Hello world 三、总结 资源概述 • SuperMap iClient for JavaScript 脚本库 libs • 示范代码库 examples • 帮助文档 apidoc • 存放控件使用的图片 • 需要的样式文件 theme • 其他终端配套资源 resource 脚本库介绍 • SuperMap-X.X.j

weixin_44540685的博客 1839

Supermap iServer从零到一:部署、服务发布与Web地图开发实战

本文提供Supermap iServer从零部署的完整实战指南,涵盖环境准备、许可激活、服务发布及Web地图开发全流程。详细讲解了如何利用iServer发布REST地图服务,并通过JavaScript库在浏览器中调用和展示地图数据,帮助GIS开发者和初学者快速搭建企业级WebGIS应用。

weixin_27960253的博客 277

SuperMap iServer 一站式集成异构GIS服务资源

本文详细介绍了SuperMap iServer如何一站式集成异构GIS服务资源,特别是与ArcGIS REST服务的无缝对接。通过实战案例展示了服务代理、要素同步、瓦片优化等核心功能,帮助用户打破GIS数据孤岛,提升跨平台服务调用效率。文章重点解析了ArcGIS服务迁移、瓦片资源优化等关键技术方案。

weixin_33716941的博客 384

学习地理信息系统(GIS)的方法及源代码示例

如果你对GIS感兴趣并希望学习如何使用它,本文将为你提供详细的指导和源代码示例。如果你对GIS感兴趣并希望学习如何使用它,本文将为你提供详细的指导和源代码示例。学习GIS软件是掌握GIS技能的关键步骤。选择一个适合你的学习目标和预算的软件,并按照其官方文档或在线教程进行学习。学习GIS软件是掌握GIS技能的关键步骤。选择一个适合你的学习目标和预算的软件,并按照其官方文档或在线教程进行学习。GIS编程是提高GIS技能的一种有效方法。学习GIS学习地理信息系统(GIS)的方法及源代码示例。

OvzStream的博客 412

使用VC++进行简单的GIS编程

在本文中,我们将使用VC++(Visual C++)编程语言来创建一个简单的GIS应用程序。我们将学习如何加载地理数据、显示地图、进行空间查询和绘制图形。我们可以在窗口上添加一些编辑框和按钮,以便用户输入查询点的经纬度坐标。然后,我们需要加载Shapefile数据并将其绘制在地图显示区域上。现在,当应用程序运行时,它将在地图显示区域上显示Shapefile数据。现在,当用户点击查询按钮时,应用程序将执行空间查询,并处理查询结果。通过调用绘制函数,可以在地图上绘制各种地理要素,如点、线、面等。

WwyOle的博客 350

GIS入门,开源 JavaScript二维地图引擎OpenLayers介绍

OpenLayers是一个开源的JavaScript库,用于显示交互式的地图和地理数据,支持多种地图数据源和格式。主要用途是在Web应用程序中呈现地图,并且可以进行各种交互操作。使用OpenLayers可以轻松创建地图应用程序,包括地图的显示、地图上的标记、地图缩放、平移、定位、测量等。OpenLayers支持的地图格式包括WMSWFSWMTSKMLGeoJSON等格式。同时,OpenLayers也支持自定义图层和数据源,可以轻松实现和集成各种第三方地图数据。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 3617

GeoServer GIS 服务器(geoServer离线地图服务器搭建)

tomcat是支持war包部署的,将下载的zip文件解压,把geoserver.war包拿出来扔到comcat --> webapps下,启动tomcat服务即可,由于我前面把tomcat端口修改为60005,访问时在浏览器输入。不利于存储,比较占内存。该组织发布了一个坐标参照系统的数据集,并维护坐标参照系统的数据集参数,以及坐标转换描述,数据集对全球收录到的坐标参照系统进行了编码。点击工作区,点击添加新的工作区填写工作区名称,命名空间url地址,这个地址在地图发布后可以调用不同的图层,一定要填写。

专注于计算机研发知识和资讯分享 1555

【chatgpt代码系列】磁导航纠偏算法推导

例如,可以根据AGV偏离路径的方向和距离,计算出需要进行的修正角度和移动距离,然后通过控制算法实现对AGV的纠偏。具体来说,磁导航AGV的行驶是通过磁场传感器感知地面磁场信号,然后根据信号的强度和方向来确定AGV的位置和方向,进而控制AGV的行驶。但是,在实际应用中,由于地面磁场信号的变化和干扰等因素,磁导航AGV可能会出现偏离路径的情况,导致行驶不稳定甚至出现误差。磁导航AGV纠偏公式是通过对AGV行驶中偏离路径的原因进行分析,结合磁导航AGV的工作原理和控制算法,推导出来的。假设AGV的目标方向为。

少磊的博客 2807

图形学基础|基于SDF的卡通阴影图

图形学基础|基于SDF的卡通阴影图 文章目录图形学基础|基于SDF的卡通阴影图一、前言二、SDF(Signed Distance Field)三、阴影图生成3.1 SDF生成3.2 插值参考博文 一、前言 回顾之前做的卡通渲染,角色面部阴影是靠一张阴影贴图实现的。 为了更好地控制角色的脸部阴影,通过计算脸部朝向与光照方向的夹角和一张单色的FaceMap来判断。 FaceMap的每个像素表示:该像素判断为阴影时候需要达到的夹角。 例如: 当方向光正对角色的时候,夹角为0°,对应的值为0,此时,FaceMap

【黑键】 1万+

CANoe诊断测试避坑指南:DTC故障注入与ECU刷写失败的N个常见原因排查

本文深入解析CANoe诊断测试中的常见问题,重点探讨DTC故障注入与ECU刷写失败的排查策略。从会话管理、安全访问到数据完整性校验,提供实战经验与CAPL脚本示例,帮助工程师规避诊断测试中的典型陷阱,提升车载网络通信与ECU刷写的可靠性。

weixin_29278805的博客 462

矢量网络分析仪VNA的校准之SOLT方法

作者:杭州冥鸿电子科技有限公司 邮箱:huanglong@deepelec.com S参数的测量方法有两种,一种是基于扫频测量的原理(VNA),另外一种是基于快沿阶跃响应的原理(TDR)。 下图是VNA的原理框图,主要包括以下部分: (1)激励信号源:提供感兴趣的频率范围内的入射信号; (2)信号分离装置:含功分器和定向耦合器,分离出入射,反射和传输信号; (3)接收机:...

u010018619的博客 2万+

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器

基于多物理参数数据融合和先进人工智能算法的锂电池热失控监测传感器是多种方案中的优选项!是一种快速、准确、可靠、应用广泛的传感方案!可有效监测锂离子电池热失控风险,保障化学能储能电站安全!

chicheng_danxin的博客 2412

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 108

Python爬虫实战:使用最新技术爬取新华网新闻数据

在当今信息爆炸的时代,网络爬虫技术已经成为获取互联网数据的重要手段。作为国内权威新闻媒体,新华网每天发布大量高质量的新闻内容,这些数据对于舆情分析、市场研究、自然语言处理等领域具有重要价值。本文将详细介绍如何使用Python最新技术构建一个高效、稳定的新华网新闻爬虫系统。本文详细介绍了如何使用Python最新技术栈构建一个高效、稳定的新华网新闻爬虫系统。我们从基础爬虫开始,逐步添加了代理支持、用户代理轮换、请求延迟、重试机制、动态页面渲染、数据存储等高级功能,最终实现了一个生产可用的分布式爬虫系统。

2201_76125261的博客 1771

MFC属性网格控件(CMFCPropertyGridCtrl)完全指南:构建专业属性编辑界面

本文详细介绍了MFC中的CMFCPropertyGridCtrl控件的使用方法。主要内容包括:控件基础用法(初始化、添加属性、事件处理)、高级设置(自定义外观、创建属性类型、动态更新)、派生类实现(自定义绘制、搜索过滤功能)、界面集成技巧(对话框布局、属性编辑器)以及实际应用示例。文章重点讲解了如何通过继承和自定义实现复杂功能,并提供了性能优化、多语言支持等最佳实践方案。该控件适用于需要大量参数配置的应用程序,能够创建类似Visual Studio属性窗口的专业界面。

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 155

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

深度学习工具包 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")

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: KubeEdge:边缘计算领域的安全防护与洞察
下一篇: 使用Mac M1安装Chromium和Puppeteer进行编程学习
普通网友
博客等级 码龄3年 27粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值