C# soe 连接服务,并获取Featureclass
直接上代码:(GetMapServer是做了一个返回多个服务的一个list封装,主要根据pServiceName判断)
//获取服务 public List<IAGSServerObjectName> GetMapServer(string pHostOrUrl, string pServiceName, bool pIsLAN) { List<IAGSServerObjectName> ListServerObjectName = new List<IAGSServerObjectName>(); string[] pServiceNameArr = pServiceName.Split(';'); //设置连接属性 IPropertySet pPropertySet = new PropertySetClass(); if (pIsLAN) pPropertySet.SetProperty("machine", pHostOrUrl); else pPropertySet.SetProperty("url", pHostOrUrl); //打开连接 IAGSServerConnectionFactory pFactory = new AGSServerConnectionFactory(); //Type factoryType = Type.GetTypeFromProgID( // "esriGISClient.AGSServerConnectionFactory"); //IAGSServerConnectionFactory agsFactory = (IAGSServerConnectionFactory) // Activator.CreateInstance(factoryType); IAGSServerConnection pConnection = pFactory.Open(pPropertySet, 0); //Get the image server. IAGSEnumServerObjectName pServerObjectNames = pConnection.ServerObjectNames; pServerObjectNames.Reset(); IAGSServerObjectName ServerObjectName = pServerObjectNames.Next(); while (ServerObjectName != null) { if (pServiceNameArr.Contains(ServerObjectName.Name) && (ServerObjectName.Type == "MapServer")) { ListServerObjectName.Add(ServerObjectName); break; } //if ((ServerObjectName.Name.ToLower() == pServiceName.ToLower()) && // (ServerObjectName.Type == "MapServer")) //{ // ListServerObjectName.Add(ServerObjectName); // //break; //} ServerObjectName = pServerObjectNames.Next(); } Marshal.ReleaseComObject(pFactory); //返回对象 return ListServerObjectName; }
调用GetMapServer
string serverurl="http://127.0.0.1:6080/arcgis/rest/services/test/Testxztd/MapServer";
//servername可多个用“;”分开;eg:"test/Testxztd;test/sss"
string servername="test/Testxztd";
var ids = [0,1];
List<IAGSServerObjectName> tempServerObjectName = GetMapServer("http://127.0.0.1:6080/arcgis/rest/services", servername, false); if (tempServerObjectName.Count > 0) { //这里是获取为第一个为例子 var pServerObjectName = tempServerObjectName[0]; //query.WhereClause = "1=1";//设置SQL语句 foreach (var i in ids) { IName pName = (IName)pServerObjectName; //访问地图服务 IAGSServerObject pServerObject = (IAGSServerObject)pName.Open(); IMapServer pMapServer = (IMapServer)pServerObject; int id = Convert.ToInt32(i); IRecordSet set = new RecordSet(); try { //查询 IQueryFilter qy = new QueryFilter(); set = pMapServer.QueryFeatureData(MapName, id, qy); ITable table = set.Table; IFeatureClass fc = table as IFeatureClass; if (found2) { qy.WhereClause = where; } IFeatureCursor cursor = fc.Search(qy, false); IFeature feature = null; ISpatialFilter sf = new SpatialFilterClass(); while ((feature = cursor.NextFeature()) != null) { //listFeature.Add(feature); //与本图层进行叠加 sf.Geometry = feature.ShapeCopy as IGeometry; sf.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects; int temp = this.m_FeatureClass.FeatureCount(sf); if (temp > 0) { pList.Add(feature); } } Marshal.ReleaseComObject(cursor); } catch { // listFeature = null;//当查询结果为空,即查询运算式出错时 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律