AO调用挂载soe的server服务的,指定图层的指定范围的图片

2023-10-18 09:30

本文主要是介绍AO调用挂载soe的server服务的,指定图层的指定范围的图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实现效果如下:

最开始说要写这个功能的时候,还挺烦躁的。因为好久没有没有动脑子写AO功能了,习惯了搬砖~(万年也写一篇博客,今天实在没啥事觉得写一篇,嘿嘿嘿~)

然后百度了网上的一些案例,发现多多少烧走到某一步的时候,就发现不是少了这个参数就是少了哪个参数。然后自己要去补全这些东西,它们到底是怎么来的,然后就补全了。

因为soe测试比较麻烦,其他的功能我都再测试程序调试好,再保class放到真正的soe程序里边直接运行的。

一、既然是导出server中的指定图层指定范围的图片,那soe所挂载的这个server必须有这个图层名称,名称必须是SDE库原来的名称!

二、再然后就是导出的时候,控制server图层的显示。

三、就是范围了,不能直接整个指定范围导出吧,就像我上边的截图,也需要周边的一些内容,还需要画出范围本身的这个红线。

        /// <summary>/// 调用soe挂载的server服务地图,并导出为图片流/// </summary>/// <param name="serverObjectHelper">当前SOE挂载在的server服务</param>/// <param name="pGeometry">当前地块的几何范围</param>/// <param name="pFeatClsNames">当前调用服务使用到的图层名称</param>/// <returns></returns>public static string fnExportImgbyte(IServerObjectHelper  serverObjectHelper, IGeometry pGeometry, List<string> pFeatClsNames){try{string imgbyte = string.Empty;//--------1、获取soe挂载的地图服务IMapServer3 pMapServer =  (IMapServer3)serverObjectHelper.ServerObject;//--------2、设置输出图片格式,并导出服务图片流----功能有效#region 设置输出图片格式IImageType imgtype = new ImageTypeClass();imgtype.Format = esriImageFormat.esriImagePNG;imgtype.ReturnType = esriImageReturnType.esriImageReturnMimeData;//imgtype.ReturnType = esriImageReturnType.esriImageReturnURL;IImageDisplay imgdisp = new ImageDisplayClass();imgdisp.Height = 400;imgdisp.Width = 500;imgdisp.DeviceResolution = 150;IImageDescription imgdesc = new ImageDescriptionClass();imgdesc.Display = imgdisp;imgdesc.Type = imgtype;#endregionIMapServerInfo pMapServerInfo =  pMapServer.GetServerInfo(pMapServer.DefaultMapName);IMapDescription pMapDescription =  pMapServerInfo.DefaultMapDescription;IMapLayerInfos layerInfos =  pMapServer.GetServerInfo(pMapServer.DefaultMapName).MapLayerInfos;//获取当前服务的所有图层//IMapServerDataAccess dataAccess =  (IMapServerDataAccess)pMapServer;//获取指定id的图层的矢量数据//IFeatureClass pfeatureclass =  (IFeatureClass)dataAccess.GetDataSource(pMapServer.DefaultMapName,  Layerindex);//获取指定id的图层的矢量数据//--------3、设置导出图片的范围为地块范围#region 设置导出图片的范围为地块范围----功能有效IMapArea pMapArea = pMapDescription.MapArea;IEnvelope pExtent = (pGeometry as IPolygon).Envelope;pExtent.Expand(1.1, 1.1, true);IMapExtent pMapExtent = (IMapExtent)pMapArea;pMapExtent.Extent = pExtent;pMapDescription.MapArea = pMapArea;#endregion//--------4、控制图层显示#region 控制图层显示----功能有效//--------4-1、获取每个矢量图层的名称SDE.--List<int> pLayerIDs = new List<int>();//当前调用服务参数,使用到的图层idIMapLayerInfo layerInfo;for (int i = 0; i < layerInfos.Count; i++){layerInfo = layerInfos.get_Element(i);foreach (string str in pFeatClsNames){if (str.Trim().ToUpper() == layerInfo.Name.ToUpper()){pLayerIDs.Add(i);}}}//--------4-2、当前soe使用的图层显示,其他隐藏ILayerDescriptions pLayerDescriptions =  pMapDescription.LayerDescriptions;for (int i = 0; i < pLayerDescriptions.Count; i++){bool flage = false;foreach (int id in pLayerIDs){if (i == id){flage = true;}}ILayerDescription pLayerDescription =  pLayerDescriptions.get_Element(i);pLayerDescription.Visible = flage;}#endregion//5、导出图片前,添加地块元素#region 添加地块元素IPolygonElement PolygonElement = new PolygonElementClass();IElement pElement = PolygonElement as IElement;pElement.Geometry = pGeometry;//设置地块元素样式IFillShapeElement pFillShapeElement = (IFillShapeElement)pElement;ISymbol pSymbol = CreateSimpleFillSymbol(Color.Red, 100,  esriSimpleFillStyle.esriSFSNull);pFillShapeElement.Symbol = (IFillSymbol)pSymbol;//新增到地图服务IGraphicElements pGraphicElements = new GraphicElementsClass();pGraphicElements.Add(pElement as IGraphicElement);pMapDescription.CustomGraphics = pGraphicElements;#endregionIImageResult pImageResult =  pMapServer.ExportMapImage(pMapDescription, imgdesc);byte[] pMimeData = pImageResult.MimeData;//图片流imgbyte = Convert.ToBase64String(pMimeData);//图片流转字符串//imgbyte = pImageResult.URL;//图片地址return imgbyte;}catch (Exception ex) { return "fnExportImgbyte方法报错:" +  ex.ToString(); }}/// <summary>/// 设置面元素样式/// </summary>/// <param name="fillColor"></param>/// <param name="oLineWidth"></param>/// <param name="fillStyle"></param>/// <returns></returns>public static ISymbol CreateSimpleFillSymbol(Color fillColor, int  oLineWidth, esriSimpleFillStyle fillStyle){ISimpleFillSymbol pSimpleFillSymbol;pSimpleFillSymbol = new SimpleFillSymbol();pSimpleFillSymbol.Style = fillStyle;pSimpleFillSymbol.Color = GetColor(fillColor.R, fillColor.G,  fillColor.B);pSimpleFillSymbol.Outline =  (ILineSymbol)CreateSimpleLineSymbol(fillColor, 1,  esriSimpleLineStyle.esriSLSDash);return (ISymbol)pSimpleFillSymbol;}/// <summary>/// 获取颜色/// </summary>/// <param name="r"></param>/// <param name="g"></param>/// <param name="b"></param>/// <returns></returns>public static IRgbColor GetColor(int r, int g, int b){RgbColor color = new RgbColor();color.Red = r;color.Green = g;color.Blue = b;return color;}/// <summary>/// 新建线样式/// </summary>/// <param name="color"></param>/// <param name="width"></param>/// <param name="style"></param>/// <returns></returns>public static ISymbol CreateSimpleLineSymbol(Color color, int width,  esriSimpleLineStyle style){ISimpleLineSymbol pSimpleLineSymbol;pSimpleLineSymbol = new SimpleLineSymbol();pSimpleLineSymbol.Width = width;pSimpleLineSymbol.Color = GetColor(color.R, color.G, color.B);pSimpleLineSymbol.Style = style;return (ISymbol)pSimpleLineSymbol;}

 

这篇关于AO调用挂载soe的server服务的,指定图层的指定范围的图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231693

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁