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

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数