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合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出