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服务的,指定图层的指定范围的图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第