`
Virgo_S
  • 浏览: 1153570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Arcgis Server+Asp.net(C#)的唯一值渲染

阅读更多
#region "唯一值渲染"
/// <summary> 唯一值渲染:uvRenderer () </summary>
/// <Author>Cavalry</Author>
/// <param name="pFieldName">渲染的字段名</param>
/// <DateTime>2008-09-02 10:59</DateTime>
public static void uvRenderer(string pFieldName)
{
  string servername = ConfigurationManager.AppSettings["MapHostName"];
    //地图服务器的计算机名
  string mapserverobject = ConfigurationManager.AppSettings["MapServiceName"];
    //地图服务名称(ArcCatalog中服务的名称)
  ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconnection = new
    ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection();
  agsconnection.Host = servername;
  agsconnection.Connect();
  IServerObjectManager som = agsconnection.ServerObjectManager;
  IServerContext serverContext = som.CreateServerContext(mapserverobject,
    "MapServer");

  IMapServer mapServer = serverContext.ServerObject as IMapServer;
  IMapServerInfo mapInfo = mapServer.GetServerInfo(mapServer.DefaultMapName);
  IMapDescription mapDesc = mapInfo.DefaultMapDescription;
  IMapServerObjects mapServerObjects = mapServer as IMapServerObjects;

  ILayer layer = mapServerObjects.get_Layer(mapServer.DefaultMapName, 0);
    //获取面图层
  IFeatureLayer pFLayer = layer as IFeatureLayer;
  IGeoFeatureLayer geoLayer = layer as IGeoFeatureLayer;

  IFeatureClass pFeatCls = geoLayer.FeatureClass as IFeatureClass;
  //查询条件
  IQueryFilter pQueryFilter = serverContext.CreateObject(
    "esriGeodatabase.QueryFilter")as IQueryFilter;
  IFeatureCursor pFeatCursor = pFeatCls.Search(pQueryFilter, false);
  //设置一个随机颜色范围
  IRandomColorRamp rx = serverContext.CreateObject(
    "esriDisplay.RandomColorRamp")as IRandomColorRamp;
  rx.MinSaturation = 20;
  rx.MaxSaturation = 40;
  rx.MinValue = 85;
  rx.MaxValue = 100;
  rx.StartHue = 76;
  rx.EndHue = 188;
  rx.Size = 360;
  rx.UseSeed = true;
  rx.Seed = 43;
  //此处需要用CreateObject方有权限对IGeoLayer的Render属性进行设置(被这个问题困扰了N久)!!!
  IUniqueValueRenderer pRender = (IUniqueValueRenderer)
    serverContext.CreateObject("esriCarto.UniqueValueRenderer");
  Int32 n;
  //同样需要CreateObject方法
  ISimpleFillSymbol symd = serverContext.CreateObject(
    "esriDisplay.SimpleFillSymbol")as ISimpleFillSymbol;
  symd.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;
  pRender.FieldCount = 1;
  pRender.set_Field(0, pFieldName);
  pRender.DefaultSymbol = symd as ISymbol;
  pRender.UseDefaultSymbol = true;

  IFeature pFeat = pFeatCursor.NextFeature();
  n = pFeatCls.FeatureCount(pQueryFilter); //n为查询到的图元的数量
  int i = 0;
  bool ValFound;
  int uh, iField;
  IFields pFields = pFeatCursor.Fields;
  iField = pFields.FindField(pFieldName); //获得要分析的字段的索引值

  while (i < n)
  {
    ISimpleFillSymbol symx = serverContext.CreateObject(
      "esriDisplay.SimpleFillSymbol")as ISimpleFillSymbol;
    symx.Style = ESRI.ArcGIS.Display.esriSimpleFillStyle.esriSFSSolid;
    symx.Outline.Width = 1;
    string x = pFeat.get_Value(iField).ToString();
    ValFound = false;
    //先查询pRender之前是否已有添加过该值,有的话则不再添加
    for (uh = 0; uh < pRender.ValueCount; uh++)
    {
      if (pRender.get_Value(uh) == x)
      {
        ValFound = true;
        break;
      }
    }
    //如果该值为尚未添加进pRender,则将值和符号样式添加给pRender
    if (!ValFound)
    {
      pRender.AddValue(x, pFieldName, (ISymbol)symx);
      pRender.set_Label(x, x);
      pRender.set_Symbol(x, (ISymbol)symx);
    }
    pFeat = pFeatCursor.NextFeature();
    i++;
  }
  //得到pRender里含有多少个不同的值,将其赋给rx的Size属性
  rx.Size = pRender.ValueCount;
  bool ok;
  rx.CreateRamp(out ok);
  Int32 ny;
  IEnumColors RColors = rx.Colors;
  RColors.Reset();
  //为每个不同的值设置不同的颜色
  for (ny = 0; ny < pRender.ValueCount; ny++)
  {
    string xv = pRender.get_Value(ny);
    if (xv != "")
    {
      ISimpleFillSymbol jsy = pRender.get_Symbol(xv)as ISimpleFillSymbol;
      jsy.Color = RColors.Next();
      pRender.set_Symbol(xv, (ISymbol)jsy);
    }
  }
  pRender.ColorScheme = "Custom";
  pRender.set_FieldType(0, true);

  geoLayer.Renderer = (IFeatureRenderer)pRender;
  geoLayer.DisplayField = pFieldName;
}

#endregion
}

}


分享到:
评论

相关推荐

    ASP.NET for ArcGIS Server开发源代码

    ASP.NET for ArcGIS Server是一种将GIS(地理信息系统)功能与微软的ASP.NET Web应用程序框架相结合的技术,用于构建高效、互动的Web GIS应用。这个开发源代码可能是为了帮助开发者深入理解如何利用ArcGIS Server的...

    用.NET构建和部署ArcGIS Server Web应用.pdf

    - **ASP.NET**: ASP.NET是微软推出的一种Web开发框架,它支持多种语言(如C#、VB.NET),提供了丰富的工具和技术,便于开发高性能的Web应用。 - **Web Server Controls**: Web服务器控件是ADF中的核心组件之一,它们...

    Web GIS 开发--ArcGIS Server与.Net源代码

    通过使用C#或VB.NET等.NET语言,开发者可以编写控制ArcGIS Server服务的代码,实现地图显示、数据操作、用户交互等功能。 在这个压缩包中,我们可以期待找到以下几个方面的源代码示例: 1. **地图服务的创建与控制...

    ArcGIS Server .Net ADF开发

    通过.Net ADF,开发者可以创建Web服务,实现地图的动态渲染、查询、编辑、分析等功能,并将这些服务发布到ArcGIS Server上供用户使用。.Net ADF支持多种开发模式,包括Web Forms、WPF以及ASP.NET MVC,满足不同类型...

    Microsoft .NET Framework 4.5安装程序

    在Web开发方面,.NET Framework 4.5带来了ASP.NET 4.5,它改进了Web Forms、MVC和Web API框架。Web Forms提供了更强大的控件和事件模型,MVC框架引入了更好的路由和过滤器,而Web API则为构建RESTful服务提供了强大...

    [ArcGIS.Engine.Developer.kit.10.英文版]

    ArcGIS Engine 10 支持多种开发环境,包括.NET Framework(C#、VB.NET)、Java、COM,允许开发者根据项目需求选择合适的编程语言。同时,它提供了详细的SDK文档和示例代码,帮助开发者快速上手。 **集成与应用** -...

    ArcGIS_Engine培训教程(袁).ppt

    3. **ArcGIS Server**: 用于在Intranet或Internet环境中发布和共享GIS服务,支持多种Web服务器技术,如Servlet、ColdFusion、ASP等。ArcSDE作为其数据库组件,提供了与主流DBMS的集成,实现大规模空间数据的高效管理...

    webgis系统,C#代码,可在vs下运行

    开发者可能使用了ASP.NET框架,这是一个强大的工具集,可以简化构建动态网站、Web应用程序和Web服务的过程。 在描述中提到这个系统"可在VS下运行",意味着开发人员可能利用了Visual Studio的集成开发环境(IDE),...

    基于C#的动物疾病上报预警及防控地理信息系统源码.zip

    3. **GIS库和API的使用**:C#中常用于GIS开发的库有Esri的ArcGIS .NET SDK或开源的GDAL/OGR、SharpMap等。开发者需要掌握如何利用这些库进行地图展示、数据处理、空间查询等功能实现。 4. **数据库交互**:系统可能...

    qimofuxi.zip

    5. 高级功能:可能还包括服务端开发,如利用ArcGIS Server或GeoServer发布GIS服务,或者使用Esri的ArcGIS Pro SDK开发桌面应用。此外,还可以结合Web技术(如ASP.NET)创建Web GIS应用。 6. 异步编程和多线程:GIS...

    11.3.2.rar_GIS编程_C#__GIS编程_C#_

    7. **Web GIS**:如果压缩包内容涉及Web开发,那么可能涵盖了使用ASP.NET创建Web地图服务,如使用ArcGIS Server的REST API或OpenLayers、Leaflet等JavaScript库与C#后端进行交互。 8. **GIS服务与互操作性**:理解...

    瓦片地图加载示例

    GMap.NET是一个强大的开源库,支持WPF、WinForms和ASP.NET等多种.NET平台,提供了丰富的地图源,包括OpenStreetMap、Google Maps等。而SharpMap则是一个轻量级的GIS库,它同样支持瓦片地图的显示,并且可以自定义...

    GIS开发案例(毕业设计)

    1. **.NET Framework**:这是微软开发的一种广泛使用的开源开发平台,提供了丰富的类库和工具,支持多种语言如C#、VB.NET等进行开发。在GIS开发中,它提供了一个稳定的运行环境和强大的编程支持。 2. **GIS基础知识...

    辽宁交通高等专科学校计算机专业毕业设计选题参考表1.pdf

    4. **ASP.NET**:这是微软的Web开发平台,用于构建动态网站、Web应用和服务,涉及C#编程和.NET框架。 5. **SAP系统**:SAP是企业级的ERP(Enterprise Resource Planning)解决方案,设计和实现基于SAP的人力资源...

    自己编的skyline三维显示网页,里面有关于水淹分析的代码

    前者可能是网页的前端部分,用ASP.NET(一种常用的Web应用程序框架)编写,负责用户界面的展示和交互。.aspx文件通常包含HTML、CSS和嵌入式的C#或VB.NET代码,这些代码与服务器端的逻辑相联系。后者的GHZS.aspx.cs...

    GIS 图层高亮显示

    这两个文件是C#编写的,用于ASP.NET Web应用程序。`default.aspx.cs`通常包含了网页的后端逻辑,处理用户请求、数据操作以及与前端交互的部分。`default.cs`可能是一个单独的类文件,提供通用的功能或与页面相关的...

    arcengine

    2. 工作环境:ArcEngine支持多种编程语言,如.NET(C#、VB.NET)、Java等,开发者可根据项目需求选择合适的开发环境。 3. 地图对象:地图是GIS的核心,ArcEngine中的地图对象包括地图层、图层组、要素类、几何对象...

    UK-Lands

    1. **C#与GIS库**:项目可能使用了如Esri的ArcGIS API for .NET或者开源的SharpMap等库来实现GIS功能。这些库允许开发者操作地图、几何对象、空间查询以及地理编码等功能。 2. **数据处理**:在“UK-Lands”项目中...

Global site tag (gtag.js) - Google Analytics