ArcGIS Engine专题地图渲染器的实现(入门版)

2023-10-18 06:50

本文主要是介绍ArcGIS Engine专题地图渲染器的实现(入门版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

专题地图(Thematic Map)是着重表示一种或数种自然要素特征或社会经济现象的地图

 

 

专题地图的内容由两部分构成:

1、专题内容——图上突出表示的自然或社会经济现象及其有关特征

2、地理基础——用以标明专题要素空间位置与地理背景的普通地图内容,主要有经纬网、水系、境界、居民地等。

专题地图制作依据要素的一个或多个不同的属性字段,根据字段值赋予地理对象不同的符号样式或者颜色,以区分不同属性值的地理要素。

 

ArcGIS Engine提供了8种标准的着色方案,每一种方案都对应了一类特征渲染器(Renderer)

特征渲染器是绘制专题地图的入口。

特征渲染器使用专题地图的一般性表示方法,如质底法、点值法、分级比例法等,以目标要素类图层的某个字段作为渲染依据,合理渲染不同字段值的要素,直至一个要素类中的所有要素都被渲染。完成渲染工作,配上制图要素——比例尺、指北针、图名、图例等后输出,即可完成一幅专题图的制作。其中,IGeoFeatureLayer的Renderer属性提供了专题图渲染的入口。简言之,通过对目标图层的Renderer属性进行渲染即可完成专题图的渲染工作。

 

下面将介绍五种渲染器的实现方法

1、简单符号法渲染器

2、分等级法渲染器

3、唯一值法渲染器

4、比例符号法渲染器

5、点状密度法渲染器

还剩下三种渲染器以后再实现

6、图表渲染器

7、分级唯一值法渲染器

8、依比例法渲染器

 

各类专题图均用的函数
getRGB(int r, int g, int b)
getGeoLayer(string layerName)

 

#region 各类专题图均用的函数
/// <summary>
/// 获得颜色的函数
/// </summary>
/// <param name="r">红色Red</param>
/// <param name="g">绿色Green</param>
/// <param name="b">蓝色Blue</param>
/// <returns>返回颜色</returns>
private IRgbColor getRGB(int r, int g, int b)
{IRgbColor pColor = new RgbColorClass();pColor.Red = r;pColor.Green = g;pColor.Blue = b;return pColor;
}
/// <summary>
/// 获取渲染图层
/// </summary>
/// <param name="layerName">图层名字</param>
/// <returns>图层</returns>
private IGeoFeatureLayer getGeoLayer(string layerName)
{ILayer pLayer; //定义图层IGeoFeatureLayer pGeoFeatureLayer; //定义要素图层  Geo?//遍历图层for (int i = 0; i < axMapControl1.LayerCount; i++){pLayer = axMapControl1.get_Layer(i);//若当前图层不为空且与与layerName的值相同if (pLayer != null && pLayer.Name == layerName){//强转成IGeoFeatureLayerpGeoFeatureLayer = pLayer as IGeoFeatureLayer;//返回pGeoFeatureLayer对象return pGeoFeatureLayer;}}return null; //返回null
}#endregion

 

1、简单符号法渲染器

简单符号法渲染(SimpleRenderer), 用同一个符号绘制所有特征
①设置简单填充符号(SimpleFillSymbol)的颜色、样式、外边界线等参数
②设置简单线型符号(SimpleLineSymbol)的样色和样式等参数
③实例化简单渲染(SimpleRender)对象并设置Symbol、Lable、Description等相关参数
④对指定图层的Render属性赋值, 完成专题图制作
⑤刷新主地图

/// <summary>
/// 简单符号法渲染器(SimpleRenderer), 用同一个符号绘制所有特征
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 简单符号法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
{//实例化ISimpleFillSysmbol变量, 提供简单的填充符号类型ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();//设置填充符号的样式——为呈45度的交叉线(xxx)///Horizontal and vertical crosshatch ++++++.pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSCross;//设置填充符号的颜色——红色pSimpleFillSymbol.Color = getRGB(96, 96, 96);//创建边线符号变量, 提供简单的线条符号类型ISimpleLineSymbol pSimpleLineSymbol = new SimpleLineSymbolClass();//设置线符号样式——线呈交替虚线和双点(_.._.._)//The line has alternating dashes and double dots _.._.._.pSimpleLineSymbol.Style = esriSimpleLineStyle.esriSLSDashDotDot;//设置线符号颜色——绿色pSimpleLineSymbol.Color = getRGB(255, 0, 0);//设置线符号宽度——1.5pSimpleLineSymbol.Width = 1.5;//将线符号强转成ISymbol符号变量ISymbol pSymbol = pSimpleLineSymbol as ISymbol;//设置符号属性ROP2为二元栅格esriROPNotXOrPenpSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;//设置填充符号外边界的样式为pSimpleLineSymbolpSimpleFillSymbol.Outline = pSimpleLineSymbol;//实例化简单渲染变量ISimpleRenderer pSimpleRender = new SimpleRendererClass();//设置pSimpleRender的符号样式pSimpleRender.Symbol = pSimpleFillSymbol as ISymbol;//设置标签名称, 用于设置图例pSimpleRender.Label = "北部湾";//设置符号描述, 用于设置图例pSimpleRender.Description = "简单渲染";//定义IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征渲染的入口, 即Renderer属性
    IGeoFeatureLayer pGeoFeatureLayer;//调用函数获取渲染图层pGeoFeatureLayer = getGeoLayer("北部湾");if (pGeoFeatureLayer != null){//调用Renderer属性, 具体说明如何通过图层要素渲染器渲染图层pGeoFeatureLayer.Renderer = pSimpleRender as IFeatureRenderer;}axMapControl1.Refresh(); //刷新axMapControl1axTOCControl1.Update(); //更新axTOCControl1
}

 

 

2、分等级法渲染器

分等级法渲染器(ClassBreakRenderer), 可以用分级的颜色和符号来绘制
①获得目标图层的属性表后赋值到ITableHistogram对象
②利用IBasicHistogram的GetHistogram方法对属性表内数据进行统计
③利用IClassifyGEN分级
④实例化分级渲染器(ClassBreakRenderer),渲染所有地图
⑤赋值目标图层的Renderer, 完成渲染
⑥刷新地图

/// <summary>
/// 分等级法渲染器(ClassBreakRenderer), 可以用分级的颜色和符号来绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 分等级法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
{//数据分成10个等级int classCount = 10;//声明一个ITableHistogram变量//该变量用于控制从表格中生成的直方图的样式
    ITableHistogram pTableHistogram;//声明一个IBasicHistogram变量//该变量用于控制从不同数据源中生成的直方图
    IBasicHistogram pBasicHistogram;//实例化表格对象
    ITable pTable;//获取生成分级专题图的目标图层
    IGeoFeatureLayer pGeoFeatureLayer;//获取渲染图层pGeoFeatureLayer = getGeoLayer("北部湾");//将pGeoFeatureLayer强转成ILayerILayer pLayer = pGeoFeatureLayer as ILayer;//将目标图层(要素类)的属性表强转成ITablepTable = pLayer as ITable;//实例化//BasicTableHistogram采用表对象输入数据的结构(如自然断点、分位数)生成直方图。pTableHistogram = new BasicTableHistogramClass();//赋值pTableHistogram的Table属性字段pTableHistogram.Table = pTable;//确定分级字段pTableHistogram.Field = "";//pTableHistogram强制转换为IBasicHistogrampBasicHistogram = pTableHistogram as IBasicHistogram;//先统计每个值出现的次数, 输出结果赋予values, frequencysobject values;object frequencys;//out参数可以在一个方法中返回多个不同类型的值pBasicHistogram.GetHistogram(out values, out frequencys);//创建平均分级对象IClassifyGEN pClassifyGEN = new QuantileClass();//用统计结果(values——值, frequences——出现频率)进行分级, 级别数目为classCountpClassifyGEN.Classify(values, frequencys, ref classCount);double[] classes;classes = pClassifyGEN.ClassBreaks as double[];//获得分级结果, 是个双精度类型数组//注意:获得双精度数组记录条数出现不可修复性错误, 故使用以下代码修复该错误double[] myclasses;myclasses = new double[classCount];//当classes不为null时if (classes != null){//遍历classes, 从后往前移一位for (int j = 0; j < classCount; j++){myclasses[j] = classes[j + 1];}}//定义一个颜色枚举变量, 通过函数获取颜色带IEnumColors pEnumColors = CreateAlgorithmicColorRamp(myclasses.Length).Colors;IColor color;//声明并实例化分级渲染器对象类//该变量提供成员控制渐变色、渐变符号专题图的制作IClassBreaksRenderer classBreaksRenderer = new ClassBreaksRendererClass();//确定分级渲染的属性字段classBreaksRenderer.Field = "";//分级数量classBreaksRenderer.BreakCount = classCount;//指示该专题图是否按升序显示classBreaksRenderer.SortClassesAscending = true;//简单填充符号(ISimpleFillSymbol)//该变量提供对成员的访问, 控制简单的填充符号
    ISimpleFillSymbol simpleFillSymbol;//通过一个循环, 给所有渲染的等级附上渲染颜色for (int i = 0; i < myclasses.Length; i++){color = pEnumColors.Next();simpleFillSymbol = new SimpleFillSymbolClass();simpleFillSymbol.Color = color;//设置填充的样式(Style)为实体填充simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;//指定分级渲染的符号(Symbol)classBreaksRenderer.set_Symbol(i, simpleFillSymbol as ISymbol);//按照分级进行渲染
        classBreaksRenderer.set_Break(i, myclasses[i]);}if (pGeoFeatureLayer != null){//调用Renderer属性, 具体说明如何通过图层要素渲染器绘制图层pGeoFeatureLayer.Renderer = classBreaksRenderer as IFeatureRenderer;}axMapControl1.Refresh(); //刷新axMapControl1axTOCControl1.Update(); //更新axTOCControl1

}

 

需要用到的函数:CreateAlgorithmicColorRamp(int count)

/// <summary>
/// 创建规则的颜色带
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
private IColorRamp CreateAlgorithmicColorRamp(int count)
{//创建一个新渐变色带(AlgorithmicColorRampClass)对象IAlgorithmicColorRamp algColorRamp = new AlgorithmicColorRampClass();IRgbColor fromColor = new RgbColorClass();IRgbColor toColor = new RgbColorClass();//创建其实颜色对象, 采用三原色定律fromColor.Red = 255;fromColor.Green = 235;fromColor.Blue = 214;//创建终止颜色对象toColor.Red = 196;toColor.Green = 10;toColor.Blue = 10;//设置AlgorithmicColorRampClass的起止颜色属性algColorRamp.ToColor = toColor;algColorRamp.FromColor = fromColor;//设置梯度类型algColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;//设置颜色带颜色数量algColorRamp.Size = count;//创建颜色带bool bture = true;algColorRamp.CreateRamp(out bture);return algColorRamp;
}

注:out参数可以在一个方法中返回多个不同类型的值

 

 

3、唯一值法渲染器

唯一值法渲染器(UniqueValueRender)——根据特征的某不同属性值来绘制该特征的符号
①遍历要素类
②获得渲染字段下的值
③使用IUniqueValueRenderer所提供的Addvalue方法渲染各个值
④赋值目标图层的Renderer属性, 完成渲染
⑤刷新地图

/// <summary>
/// 唯一值法渲染器(UniqueValueRender)——根据特征的某不同属性值来绘制该特征的符号
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 唯一值法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
{//定义IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口IGeoFeatureLayer geoFeatureLayer = getGeoLayer("北部湾");//使用查询的方式, 获得参与渲染的记录条数int get_Count = geoFeatureLayer.FeatureClass.FeatureCount(null);//提供操作唯一值的相关成员IUniqueValueRenderer uniqueValueRenderer = new UniqueValueRendererClass();//设置渲染的字段个数范围:0~3个//这里仅设置1个字段uniqueValueRenderer.FieldCount = 1;//设置渲染字段, 并制定到索引处//索引从0开始; 设定渲染字段为"地市名"uniqueValueRenderer.set_Field(0, "地市名");//简单填充符号
    ISimpleFillSymbol simpleFillSymbol;//获得指向渲染要素的游标IFeatureCursor pFtCursor = geoFeatureLayer.FeatureClass.Search(null, false);IFeature pFeature;if (pFtCursor != null){//定义枚举颜色带, 调用函数, 生成随机颜色带IEnumColors enumColors = CreateRandomColorRamp(get_Count).Colors;//查找到"地市名"字段的索引(index)int fieldIndex = geoFeatureLayer.FeatureClass.Fields.FindField("地市名");while ((pFeature = pFtCursor.NextFeature()) != null){//获取要素值string nameValue = pFeature.get_Value(fieldIndex).ToString();//实例化填充符号//使用填充符号来赋值地图的背景值simpleFillSymbol = new SimpleFillSymbolClass();//给要素附上样式simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;//给要素附上颜色simpleFillSymbol.Color = enumColors.Next() as IColor;//值和符号对应uniqueValueRenderer.AddValue(nameValue, "地市", simpleFillSymbol as ISymbol);}}//赋值目标图层的渲染器属性geoFeatureLayer.Renderer = uniqueValueRenderer as IFeatureRenderer;axMapControl1.Refresh(); //刷新axMapControl1axTOCControl1.Update(); //更新axTOCControl1
}

 

需要用到的函数:CreateRandomColorRamp(int Number)

/// <summary>
/// 创建随机的颜色条带
/// </summary>
/// <param name="Number"></param>
/// <returns></returns>
private IColorRamp CreateRandomColorRamp(int Number)
{//请注意色度、饱和度、最大值、最小值、随机种子数等参数的设定//参数不同, 所产生的色带也不同IRandomColorRamp pRandomColorRamp = new RandomColorRampClass();pRandomColorRamp.StartHue = 0;  //开始色度pRandomColorRamp.EndHue = 360;pRandomColorRamp.MinValue = 99;pRandomColorRamp.MaxValue = 100;pRandomColorRamp.MinSaturation = 15;    //最小饱和度pRandomColorRamp.MaxSaturation = 30;    //最大饱和度pRandomColorRamp.Size = Number; //设置颜色带数量pRandomColorRamp.Seed = 23; //随机数种子bool bture = true;pRandomColorRamp.CreateRamp(out bture);return pRandomColorRamp;
}

 

 

4、比例符号法渲染器

比例符号法渲染器(ProportionalSymbolRenderer)——用不同大小的符号绘制要素, 其大小对应某一字段值的比例。
①统计目标字段, 获得相关统计值
②设计标记符号
③补充完整ProportionalSymbolRenderer对象的重要属性值
④赋值目标图层的Renderer属性, 完成渲染
⑤刷新地图

/// <summary>
/// 比例符号法渲染器(ProportionalSymbolRenderer)——用不同大小的符号绘制要素, 其大小对应某一字段值的比例。
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 比例符号法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
{//声明IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口
    IGeoFeatureLayer geoFeatureLayer;//声明要素图层
    IFeatureLayer pFtLayer;//声明专题图变量//在利用该方法进行着色时, 需获得最大和最小标识符号所代表的字段及其各个数值, 还需要确定每个字段数值所匹配的着色符号。
    IProportionalSymbolRenderer proportionalSymbolRenderer;//声明表格
    ITable table;//声明游标
    ICursor cursor;//用于统计变量
    IDataStatistics dataStatistics;//用于存放统计结果
    IStatisticsResults statisticsResults;//声明一个字体对象
    stdole.IFontDisp fontDisp;//获取图层geoFeatureLayer = getGeoLayer("北部湾");//强转为要素图层pFtLayer = geoFeatureLayer as IFeatureLayer;//图层类型转换成表table = geoFeatureLayer as ITable;//获取游标cursor = table.Search(null, true);//实例化数据统计对象dataStatistics = new DataStatisticsClass();//赋游标给数据统计对象的游标dataStatistics.Cursor = cursor;//获取图层要素中进行专题地图制图的字段名称, 此实例中所用的数据中字段名为"年"(2010年GDP增长速率)dataStatistics.Field = "";//存放统计结果为统计对象的统计数据statisticsResults = dataStatistics.Statistics;//如果统计结果不为空if (statisticsResults != null){//简单填充符号IFillSymbol fillSymbol = new SimpleFillSymbolClass();//设置颜色fillSymbol.Color = getRGB(195, 255, 255);//设置简单线型符号ISimpleLineSymbol SLS = new SimpleLineSymbolClass();SLS.Color = getRGB(196, 196, 196);//颜色SLS.Width = 1.5;//宽度fillSymbol.Outline = SLS;//外边界线//利用ESRI特殊符号调用成员进行填充ICharacterMarkerSymbol characterMarkerSymbol = new CharacterMarkerSymbolClass();fontDisp = new stdole.StdFontClass() as stdole.IFontDisp;//调用指定子库(ESRI Default Marker是子库名称)fontDisp.Name = "ESRI Default Marker";//对characterMarkerSymbol的font属性characterMarkerSymbol.Font = fontDisp;//特征标记符号(Character Marker Symbol)的索引值//0xB6是C#特殊的16进制表示方法, 换算为十进制值182characterMarkerSymbol.CharacterIndex = 0xB6;//特征标记符号的颜色characterMarkerSymbol.Color = getRGB(253, 191, 110);//设计特征标记符号的尺寸characterMarkerSymbol.Size = 18;//实例化一个比例符号渲染器proportionalSymbolRenderer = new ProportionalSymbolRendererClass();proportionalSymbolRenderer.ValueUnit = esriUnits.esriUnknownUnits;//获取渲染字段proportionalSymbolRenderer.Field = "";//是否启用颜色补偿(默认为否)proportionalSymbolRenderer.FlanneryCompensation = false;//赋值统计数据(比例符号渲染器)            //MinDataValue获取数据中最小值proportionalSymbolRenderer.MinDataValue = statisticsResults.Minimum;//获取数据中最大值proportionalSymbolRenderer.MaxDataValue = statisticsResults.Maximum;//在多边形特征上绘制比例标记符号时使用的背景填充符号proportionalSymbolRenderer.BackgroundSymbol = fillSymbol;//用于绘制具有规格化最小数据值的特征的符号。proportionalSymbolRenderer.MinSymbol = characterMarkerSymbol as ISymbol;//目录和图例中显示的符号数为3proportionalSymbolRenderer.LegendSymbolCount = 3;//创建图例, 设置完所有属性后调用。
        proportionalSymbolRenderer.CreateLegendSymbols();//赋值目标图层的渲染器属性geoFeatureLayer.Renderer = proportionalSymbolRenderer as IFeatureRenderer;}axMapControl1.Refresh(); //刷新axMapControl1axTOCControl1.Update(); //更新axTOCControl1

}

 

 

5、点状密度法渲染器

点状密度法渲染器(DotDensityRenderer)——在多边形特征中绘制不同密度的点
①制作点符号
②使用IDotDensityFillSymbo包装制作好的符号
③赋值点密度渲染(dotDensityRenderer)的点密度符号(DotDensitySymbol)属性
④赋值其它参数
⑤赋值目标图层的Renderer属性, 完成渲染
⑥刷新地图

/// <summary>
/// 点状密度法渲染器(DotDensityRenderer)——在多边形特征中绘制不同密度的点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void 点状密度法渲染ToolStripMenuItem_Click(object sender, EventArgs e)
{//声明IGeoFeatureLayer变量, 提供一个要素图层对成员控制地理特征的入口
    IGeoFeatureLayer geoFeatureLayer;//定义点密度填充符号变量, 控制点符号的属性
    IDotDensityFillSymbol dotDensityFillSymbol;//定义点密度渲染对象
    IDotDensityRenderer dotDensityRenderer;//获取渲染图层geoFeatureLayer = getGeoLayer("北部湾");//实例化点密度渲染对象dotDensityRenderer = new DotDensityRendererClass();//强转点密度渲染对象并强转成渲染字段对象IRendererFields rendererFields = dotDensityRenderer as IRendererFields;//设置渲染字段string field1 = "";//向渲染器添加字段(字段名、别名)
    rendererFields.AddField(field1, field1);//实例化点密度填充符号dotDensityFillSymbol = new DotDensityFillSymbolClass();dotDensityFillSymbol.DotSize = 4;//设置点的大小dotDensityFillSymbol.Color = getRGB(0, 255, 0);//设置点的颜色//将点密度填充符号强转为符号数组成员ISymbolArray symbolArray = dotDensityFillSymbol as ISymbolArray;//实例化简单标记符号ISimpleMarkerSymbol simpleMarkerSymbol = new SimpleMarkerSymbolClass();//设置点的符号为圆圈simpleMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;simpleMarkerSymbol.Size = 4;//设置大小simpleMarkerSymbol.Color = getRGB(0, 255, 0);//设置颜色//点符号的外边不填充颜色simpleMarkerSymbol.OutlineColor = getNoRGB();//将简单标记符号样式增加到符号数组成员中symbolArray.AddSymbol(simpleMarkerSymbol as ISymbol);//赋值点密度渲染(dotDensityRenderer)的点密度符号(DotDensitySymbol)属性dotDensityRenderer.DotDensitySymbol = dotDensityFillSymbol;//设置渲染密度dotDensityRenderer.DotValue = 0.003;//设置点密度填充符号的背景色dotDensityFillSymbol.BackgroundColor = getRGB(255, 255, 255);//创建图例
    dotDensityRenderer.CreateLegend();//赋值目标图层的渲染器属性geoFeatureLayer.Renderer = dotDensityRenderer as IFeatureRenderer;axMapControl1.Refresh(); //刷新axMapControl1axTOCControl1.Update(); //更新axTOCControl1

}

 

需要用到的函数:getNoRGB()

/// <summary>
/// 不填充颜色
/// </summary>
/// <returns></returns>
private IColor getNoRGB()
{IRgbColor pColor = new RgbColorClass();//.NullColor指示此颜色是否为空。true表明颜色为空pColor.NullColor = true;return pColor;//返回pColor
}

 

 

 

谢谢观看!本人初学GIS二次开发,如果有不对的地方,请多多包涵!

 

这篇关于ArcGIS Engine专题地图渲染器的实现(入门版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qq_41154882/article/details/102835396
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/230902

相关文章

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Python实现特殊字符判断并去掉非字母和数字的特殊字符

《Python实现特殊字符判断并去掉非字母和数字的特殊字符》在Python中,可以通过多种方法来判断字符串中是否包含非字母、数字的特殊字符,并将这些特殊字符去掉,本文为大家整理了一些常用的,希望对大家... 目录1. 使用正则表达式判断字符串中是否包含特殊字符去掉字符串中的特殊字符2. 使用 str.isa

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析