ArcGIS Engine渲染

符号化之Renderer( 渲染)体系

ArcGIS Engine9.3对GIS数据的符号化分为矢量数据渲染和栅格数据渲染两大类。接下来分别介绍FeatureRender和RasterRender。

1.FeatureRender对象
    FeatureRenderer是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IFeatureRenderer接口,这个接口定义了进行要素图层符号化的公共属性和方法。
    可以通过IGeoFeatureLayer::Renderer属性获得一个要素图层的符号化对象

表四

要素符号化类型 描述
SimpleRender 简单符号化
UniqueValueRender 唯一值符号化
BiUniqueValueRender 双变量唯一值符号化
ChartRender 图表符号化
ClassBreaksRenderer 分类等级符号化
DotDensityRenderer 点密度符号化
ProportionalSymbolRenderer 根据属性值设置符号大小进行符号化
ScaleDependentRenderer 依比例尺符号化
RepresentationRenderer 制图表达符号化
CoTrackSymbologyRenderer(TrackingAnalyst) 轨迹符号化(应用于TrackingAnaylyst扩展模块)
EnhancedInfoRenderder(TrackingAnalyst) 增强信息符号化(应用于TrackingAnaylyst扩展模块)
UniqueValueTextRenderer(TrackingAnalyst) 唯一值文本符号化(应用于TrackingAnaylyst扩展模块)
NAStopRenderer(NetworkAnalyst) 停止符号化(应用于网络分析扩展模块)
FeatureVertexRenderer(SurveyExt) 要素定点符号化(应用于测量分析扩展模块)
SharedEdgeRenderer(EditorExt) 用于绘制拓扑元素

常用的要素符号化类型主要有以下6种类型,如图13所示:
    

图13

由于篇幅有限不再对每一种符号化类型的使用进行讲解,在后边的实例中将为读者演示如何进行唯一值符号化。

2.RasterRender对象
      RasterRender是一个抽象类,它有15个子类负责进行不同类型的着色运算。它们都实现了IRasterRender接口,这个接口定义了栅格图层符号化的公共属性和方法。可以通过IRasterLayer::Renderer属性获得一个栅格图层的符号化对象。

要素符号化类型 描述
RasterRGBRenderer 栅格RGB符号化
RasterUniqueValueRenderer 唯一值符号化
RasterColormapRenderer 双变量唯一值符号化
RasterClassifyColorRampRenderer 图表符号化
RasterStretchColorRampRenderer 分类等级符号化
RasterDiscreteColorRenderer 点密度 符号化

栅格符号化类型结构图如图14所示:

图14

以下代码片段是对一个RasterLayer进行RasterStretchColorRampRenderer符号化操作:

///

/// StretchColorRamp符号化RasterLayer

///

///RasterLayer

publicvoid SetStretchColorRampRenderer(IRasterLayer pRasterLayer)

{

try

{

//创建RasterStretchColorRampRendererClass对象

IRasterStretchColorRampRenderer pRStretchRender=newRasterStretchColorRampRendererClass();

//QI到IRasterRenderer

IRasterRenderer pRasterRender=pRStretchRenderas IRasterRenderer;

pRasterRender.Raster = pRasterLayer asIRaster;

pRasterRender.Update();

//创建两个起始颜色

IRgbColor pFromRgbColor =new RgbColorClass();

pFromRgbColor.Red = 255;

IRgbColor pToRgbColor =new RgbColorClass();

pToRgbColor.Blue = 255;

//创建起止颜色带

IAlgorithmicColorRamp pAlgorithmicColorRamp =newAlgorithmicColorRampClass();

pAlgorithmicColorRamp.Size = 255;

pAlgorithmicColorRamp.FromColor = pFromRgbColor asIColor;

pAlgorithmicColorRamp.ToColor = pToRgbColor asIColor;

bool btrue=true;

pAlgorithmicColorRamp.CreateRamp(out btrue);

//选择拉伸颜色带符号化的波段

pRStretchRender.BandIndex = 0;

//设置拉伸颜色带符号化所采用的颜色带

pRStretchRender.ColorRamp = pAlgorithmicColorRamp asIColorRamp;

pRasterRender.Update();

//符号化RasterLayer

pRasterLayer.Renderer = pRasterRender;

}

catch(Exception Err)

{

MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);

}

}

AE之分级颜色专题图渲染

参考代码1:

private void 分级渲染ToolStripMenuItem_Click(object sender, EventArgs e)

{

//值分级

IBasicHistogram pBasicHis = new BasicTableHistogramClass();

ITableHistogram pTabHis = (ITableHistogram)pBasicHis;

pTabHis.Field = "w1";

ITable pTab = (ITable)axMapControl1.get_Layer(0);

pTabHis.Table = pTab;

object doubleArrVal, longArrFreq;

pBasicHis.GetHistogram(out doubleArrVal, out longArrFreq);

IClassifyGEN pClassify = new EqualIntervalClass();  //NaturalBreaksClass

int nDes = 5;

pClassify.Classify(doubleArrVal, longArrFreq, ref nDes);

object classes = pClassify.ClassBreaks;

System.Array pArr = (System.Array)classes;

//算法梯度颜色

IAlgorithmicColorRamp pAlgoColorRamp = new AlgorithmicColorRampClass();

pAlgoColorRamp.Size = pArr.Length;

IRgbColor pFromColor = new RgbColorClass(), pToColor = new RgbColorClass();

pFromColor.Red = 0;

pFromColor.Green = 255;

pFromColor.Blue = 0;

pToColor.Red = 255;

pToColor.Green = 0;

pToColor.Blue = 255;

pAlgoColorRamp.FromColor = pFromColor;

pAlgoColorRamp.ToColor = pToColor;

bool ok = true;

pAlgoColorRamp.CreateRamp(out ok);

//颜色梯度结束

IClassBreaksRenderer pRender = new ClassBreaksRendererClass();

pRender.BreakCount = pArr.Length;

pRender.Field = "w1";

ISimpleFillSymbol pSym;

for (int i = 0; i < pArr.Length; i++)

{

pRender.set_Break(i, (double)pArr.GetValue(i));

pSym = new SimpleFillSymbolClass();

pSym.Color = pAlgoColorRamp.get_Color(i);

pRender.set_Symbol(i, (ISymbol)pSym);

}

IGeoFeatureLayer pGeoLyr = (IGeoFeatureLayer)axMapControl1.get_Layer(0);

pGeoLyr.Renderer = (IFeatureRenderer)pRender;

axMapControl1.Refresh();

axTOCControl1.Update();

}

参考代码2:

private void 分层设色ToolStripMenuItem_Click(object sender, EventArgs e)

{

//获取当前图层 ,并把它设置成IGeoFeatureLayer的实例

IMap pMap = axMapControl1.Map;

ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer;

IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer;

//获取图层上的feature

IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);

IFeature pFeature = pFeatureCursor.NextFeature();

//

IFeatureRenderer PR=pGeoFeatureLayer.Renderer;

//JoinData("县级区域", "DZGB", "sectioncode");   //join外部表

// int DC ;

int  desiredClasses = 5;

string fieldName = "w1";

int classesCount;

double[] classes;

string strOutput = "";

bool ok;

object dataFrequency;

object dataValues;

ITable pTable ;

//IClassify pClassify;

EqualIntervalClass pClassify;

//IBasicHistogram pTableHistogram = new BasicTableHistogramClass();

//IHistogram pTableHistogram = new BasicTableHistogramClass();

ITableHistogram pTableHistogram = new BasicTableHistogramClass() as ITableHistogram;

IBasicHistogram pHistogram;

IClassBreaksRenderer pClassBreaksRenderer;

IHsvColor pFromColor;

IHsvColor pToColor;

IAlgorithmicColorRamp pAlgorithmicColorRamp;

IEnumColors pEnumColors;

IColor pColor;

ISimpleFillSymbol pSimpleFillSymbol;

pLayer = (IFeatureLayer)axMapControl1.get_Layer(0);

pGeoFeatureLayer = (IGeoFeatureLayer)pLayer;

pTable = (ITable)pGeoFeatureLayer;

pHistogram = (IBasicHistogram)pTableHistogram;

// Get values and frequencies for the field

pTableHistogram.Field = fieldName;

pTableHistogram.Table = pTable;

pHistogram.GetHistogram(out dataValues, out dataFrequency);

// Put values and frequencies into an Equal Interval Classify Object

pClassify = new EqualIntervalClass();

//pClassify = new NaturalBreaksClass();

pClassify.SetHistogramData(dataValues, dataFrequency);

pClassify.Classify(dataValues, dataFrequency, ref desiredClasses);

//pClassify.Classify(ref desiredClasses);

classes = (double[])pClassify.ClassBreaks;

classesCount = classes.Length;

// Initialise a new Class Breaks renderer

// Supply the number of Class Breaks and the field to perform. the class breaks on

pClassBreaksRenderer = new ClassBreaksRendererClass();

pClassBreaksRenderer.Field = fieldName;

pClassBreaksRenderer.BreakCount = classesCount;

pClassBreaksRenderer.SortClassesAscending = true;

// Use algorithmic color ramp to generate an range of colors between YELLOW to RED

// Initial color: YELLOW

pFromColor = new HsvColorClass();

pFromColor.Hue = 60;

pFromColor.Saturation = 100;

pFromColor.Value = 96;

// Final color: RED

pToColor = new HsvColorClass();

pToColor.Hue = 0;

pToColor.Saturation = 100;

pToColor.Value = 96;

// Set up HSV Color ramp to span from YELLOW to RED

pAlgorithmicColorRamp = new AlgorithmicColorRampClass();

pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriHSVAlgorithm;

pAlgorithmicColorRamp.FromColor = pFromColor;

pAlgorithmicColorRamp.ToColor = pToColor;

pAlgorithmicColorRamp.Size = classesCount;

pAlgorithmicColorRamp.CreateRamp(out ok);

pEnumColors = pAlgorithmicColorRamp.Colors;

for (int index = 0; index < classesCount - 1; index++)

{

pColor = pEnumColors.Next();

pSimpleFillSymbol = new SimpleFillSymbolClass();

pSimpleFillSymbol.Color = pColor;

pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSSolid;

pClassBreaksRenderer.set_Symbol(index, (ISymbol)pSimpleFillSymbol);

pClassBreaksRenderer.set_Break(index, classes[index + 1]);

// Store each break value for user output

strOutput += "-" + classes[index + 1] + "\n";

}

pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;

//this.axMapControl1.Refresh();

/////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////

//get the custom property from which is supposed to be the layer to be saved

object customProperty = null;

//IMapControl3 mapControl = null;

customProperty = axMapControl1.CustomProperty;

//ask the user to set a name for the new layer file

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.Filter = "Layer File|*.lyr|All Files|*.*";

saveFileDialog.Title = "生成专题图";

saveFileDialog.RestoreDirectory = true;

saveFileDialog.FileName = System.IO.Path.Combine(saveFileDialog.InitialDirectory, pGeoFeatureLayer.Name + ".lyr");

//get the layer name from the user

DialogResult dr = saveFileDialog.ShowDialog();

if (saveFileDialog.FileName != "" && dr == DialogResult.OK)

{

if (System.IO.File.Exists(saveFileDialog.FileName))

{

//try to delete the existing file

System.IO.File.Delete(saveFileDialog.FileName);

}

//create a new LayerFile instance

ILayerFile layerFile = new LayerFileClass();

//create a new layer file

layerFile.New(saveFileDialog.FileName);

//attach the layer file with the actual layer

layerFile.ReplaceContents((ILayer)pGeoFeatureLayer);

//save the layer file

layerFile.Save();

//ask the user whether he‘d like to add the layer to the map

if (DialogResult.Yes == MessageBox.Show("Would you like to add the layer to the map?", "Message", MessageBoxButtons.YesNo,MessageBoxIcon.Question))

{

axMapControl1.AddLayerFromFile(saveFileDialog.FileName, 0);

}

}

IActiveView pActiveView = axMapControl1.Map as IActiveView;

pActiveView.Refresh();

axTOCControl1.Update();

}

参考代码3:

private void 等级专题图ToolStripMenuItem_Click(object sender, EventArgs e)

{

// 获取当前图层,并把它设置成IGeoFeatureLayer的实例

ILayer pLayer = axMapControl1.get_Layer(0);

IFeatureLayer pFeatLayer = (IFeatureLayer)pLayer;

IGeoFeatureLayer pGeoFeatLayer = (IGeoFeatureLayer)pLayer;

IFeatureClass pFeatClass = pFeatLayer.FeatureClass;

// We‘re going to retrieve frequency data from a population

// field and then clasify this data

ITable pTable = (ITable)pFeatClass;

IBasicHistogram pBasicHistogram = new BasicTableHistogramClass();

ITableHistogram pTableHistogram = (ITableHistogram)pBasicHistogram;

// Get values and frequencies for the population field into a table histogram object

string fieldName = "w1";

pTableHistogram.Field = fieldName;

pTableHistogram.Table = pTable;

object dataValues;

object dataFrequency;

pBasicHistogram.GetHistogram(out dataValues, out dataFrequency);

IClassifyGEN pClassifyGEN = new QuantileClass();

int numClass = 3;

pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass);

double[] classes = (double[])pClassifyGEN.ClassBreaks;

long classesCount = long.Parse(classes.GetUpperBound(0).ToString());

// Initialize a new class breaks renderer and supply the number of class breaks

// and the field to perform the class breaks on

IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();

pClassBreaksRenderer.Field = fieldName;

pClassBreaksRenderer.MinimumBreak = classes[0];

pClassBreaksRenderer.SortClassesAscending = true;

// 设置着色对象的分级数目

pClassBreaksRenderer.BreakCount = int.Parse(classesCount.ToString());

// 创建并设置随机色谱

IAlgorithmicColorRamp pAlgorithmicColorRamp = new AlgorithmicColorRampClass();

pAlgorithmicColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

IEnumColors pEnumColors;

IRgbColor pColor1 = new RgbColorClass();

IRgbColor pColor2 = new RgbColorClass();

pColor1.Red = 255;

pColor1.Green = 210;

pColor1.Blue = 210;

pColor2.Red = 190;

pColor2.Green = 0;

pColor2.Blue = 170;

pAlgorithmicColorRamp.FromColor = pColor1;

pAlgorithmicColorRamp.ToColor = pColor2;

pAlgorithmicColorRamp.Size = numClass;

bool ok = true;

pAlgorithmicColorRamp.CreateRamp(out ok);

pEnumColors = pAlgorithmicColorRamp.Colors;

pEnumColors.Reset();

IClassBreaksUIProperties pUIProperties = (IClassBreaksUIProperties)pClassBreaksRenderer;

pUIProperties.ColorRamp = "Custom";

ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass();

IColor pColor;

int[] colors = new int[numClass];

// be careful, indices are different for the different lists

for (int breakIndex = 0; breakIndex < classesCount; breakIndex++)

{

pClassBreaksRenderer.set_Label(breakIndex, classes[breakIndex] + "-" + classes[breakIndex + 1]);

pUIProperties.set_LowBreak(breakIndex, classes[breakIndex]);

ISimpleFillSymbol pFillSymbol = new SimpleFillSymbolClass();

pColor = pEnumColors.Next();

pFillSymbol.Color = pColor;

colors[breakIndex] = pColor.RGB;

pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pFillSymbol);

pClassBreaksRenderer.set_Break(breakIndex, classes[breakIndex + 1]);

}

// 将等级图渲染对象与渲染图层挂钩

pGeoFeatLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;

axMapControl1.ActiveView.Refresh();

axTOCControl1.Update();

}

参考代码4:

private void 等级图ToolStripMenuItem_Click(object sender, EventArgs e)

{

//获取当前图层 ,并把它设置成IGeoFeatureLayer的实例

IMap pMap = axMapControl1.Map;

ILayer pLayer = pMap.get_Layer(0) as IFeatureLayer;

IFeatureLayer pFeatureLayer = pLayer as IFeatureLayer;

IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureLayer;

//获取图层上的feature

IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false);

IFeature pFeature = pFeatureCursor.NextFeature();

//////////////////////////////////////////////////////////////////////

//定义所需的接口对象和相关变量

IClassBreaksUIProperties pUIProperties;

object dataValues;

object dataFrequency;

//double[] cb;

int breakIndex;

long ClassesCount;

int numClass;

numClass = 10;

double[] Classes;

//////////////////////////////////////////////////////////////////////

ITable pTable;

pTable = pFeatureClass as ITable;

IBasicHistogram pBasicHist = new BasicTableHistogramClass();

ITableHistogram pTableHist;

pTableHist = (ITableHistogram)pBasicHist;

//Get values and frequencies for the population field into a table histogram object

pTableHist.Field = "w1";

pTableHist.Table = pTable;

pBasicHist.GetHistogram(out dataValues, out dataFrequency);

IClassifyGEN pClassifyGEN = new QuantileClass();

pClassifyGEN.Classify(dataValues, dataFrequency, ref numClass);

Classes = (double[])pClassifyGEN.ClassBreaks;

ClassesCount = long.Parse(Classes.GetUpperBound(0).ToString());

//Initialise a new class breaks renderer and supply the number of class breaks and the field to perform. the class breaks on.

IClassBreaksRenderer pClassBreaksRenderer = new ClassBreaksRendererClass();

pClassBreaksRenderer.Field = "w1";

//pClassBreaksRenderer.BreakCount = ClassesCount;

pClassBreaksRenderer.MinimumBreak = Classes[0];

pClassBreaksRenderer.SortClassesAscending = true;

//设置着色对象的分级数目

pClassBreaksRenderer.BreakCount = int.Parse(ClassesCount.ToString());

//创建并设置随机色谱

IAlgorithmicColorRamp pColorRamp = new AlgorithmicColorRampClass();

pColorRamp.Algorithm = esriColorRampAlgorithm.esriCIELabAlgorithm;

IEnumColors pEnumColors;

IRgbColor pColor1 = new RgbColorClass();

IRgbColor pColor2 = new RgbColorClass();

pColor1.Red = 255;

pColor1.Green = 210;

pColor1.Blue = 210;

pColor2.Red = 190;

pColor2.Green = 0;

pColor2.Blue = 170;

pColorRamp.FromColor = pColor1;

pColorRamp.ToColor = pColor2;

pColorRamp.Size = numClass;

bool ok = true;

//pColorRamp.CreateRamp(out ok);

pColorRamp.CreateRamp(out ok);

pEnumColors = pColorRamp.Colors;

pEnumColors.Reset();// use this interface to set dialog properties

pUIProperties = pClassBreaksRenderer as IClassBreaksUIProperties;

pUIProperties.ColorRamp = "Custom";

ISimpleFillSymbol pSimpleMarkerSymbol = new SimpleFillSymbolClass();

IColor pColor;

int[] colors = new int[numClass];

// be careful, indices are different for the diff lists

for (breakIndex = 0; breakIndex < ClassesCount; breakIndex++)

{

pClassBreaksRenderer.set_Label(breakIndex, Classes[breakIndex] + " - " + Classes[breakIndex + 1]);

pUIProperties.set_LowBreak(breakIndex, Classes[breakIndex]);

pSimpleMarkerSymbol = new SimpleFillSymbolClass();

pColor = pEnumColors.Next();

pSimpleMarkerSymbol.Color = pColor;

colors[breakIndex] = pColor.RGB;

pClassBreaksRenderer.set_Symbol(breakIndex, (ISymbol)pSimpleMarkerSymbol);

pClassBreaksRenderer.set_Break(breakIndex, Classes[breakIndex + 1]);

}

//将等级图渲染对象与渲染图层挂钩

pGeoFeatureLayer.Renderer = (IFeatureRenderer)pClassBreaksRenderer;

//刷新地图和TOOCotrol

IActiveView pActiveView = axMapControl1.Map as IActiveView;

pActiveView.Refresh();

axTOCControl1.Update();

}

from:  http://blog.sina.com.cn/s/blog_90b91bf101015jkj.html

http://blog.sina.com.cn/s/blog_642c66ed0101cs5m.html

时间: 2024-10-28 07:28:18

ArcGIS Engine渲染的相关文章

ArcGIS Engine开发前基础知识(1)

ArcGIS二次开发是当前gis领域的一项重要必不可少的技能.下面介绍它的基本功能 一.ArcGIS Engine功能 在使用之前首先安装和部署arcgis sdk,(在这里不在赘述相关知识)可以实现的功能主要有地图的基本操作.信息查询.专题地图制作.数据编辑.网络分析.空间统计分析.三维分析等. 1.地图的基本操作 地图的基本操作主要包括加载矢量.栅格数据,浏览缩放地图,保存地图,在地图上显示文本注记,绘制点线面几何体等. 2.信息查询 信息查询主要通过矩形圆形或多边形来选中地图上的要素,或者

ArcGIS Engine开发前基础知识(2)

ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutControl,TOCControl.ToolbarControl,GlobeControl,和SceneControl等 MapControl控件 MapControl控件对应于ARCMap中的数据视图,主要用于显示.操作和分析地理数据.它封装了Map对象,可以加载已有的地图文档(*mxd文档)或者直接添加矢

[转载]ArcGIS Engine 中的多线程使用

ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写写AE中多线程的使用,但一直苦于没有时间,终于在中秋假期闲了下来.呵呵,闲话不说了,进入正题! 大家都了解到ArcGIS中处理大数据量时速度是相当的慢,这时如果你的程序是单线程的,那可就让人着急坏了,不知道处理到什么地步,不能操作其他的功能,无奈~~如果在这时你能够想到用多线程技术,那就来试试该如何

ArcGIS engine中Display类库 (局部刷新)

转自原文 ArcGIS engine中Display类库 (局部刷新) Display类库包括了用于显示GIS数据的对象.除了负责实际输出图像的主要显示对象(display object)外,这个类库还包含了表示符号和颜色的对象,用于控制在显示(display)中绘制时实体的属性.这个类库也包含了用户与显示(display)交互时的可视化反馈的对象.完成这些功能的对象被归并到一组类库子系统中. 这些类库子系统是: n         Display n         Dynamic Displ

ArcGIS Engine中的Symbols详解

转自原文ArcGIS Engine中的Symbols详解 本文由本人翻译ESRI官方帮助文档.尊重劳动成果,转载请注明来源. Symbols ArcObjects用了三种类型的Symbol(符号样式)来绘制图形特征:marker symbols(标记符号),line symbols(线符号),和fill symbols(填充符号).这些样式同样可以用来绘制elements(元素)图形,比如在地图或制版视图上的图表边线和指北针箭头.第四个样式text symbol(文字符号)是用来绘制标注和其他文

ArcGIS engine中Display类库——Display

转自原文  ArcGIS engine中Display类库——Display Display类库包括了用于显示GIS数据的对象.除了负责实际输出图像的主要显示对象(display object)外,这个类库还包含了表示符号和颜色的对象,用于控制在显示(display)中绘制时实体的属性.这个类库也包含了用户与显示(display)交互时的可视化反馈的对象.完成这些功能的对象被归并到一组类库子系统中. 这些类库子系统是: n         Display n         Dynamic Di

Arcgis Engine 10.2安装过程

安装顺序 : VS2010-->Arcgis 10.2-->Arcgis engine 10.2-->ArcObjects SDK for Microsoft.NET Framework. vs2010安装方式略 一.Arcgis10.2安装 选择ArcGIS10.2 解压后的安装包中ESRI.exe文件 第一步安装ArcGIS License Manager (选择合适路径,基本一路回车) 安装好以后,启动License Manager,选择停止 第二步安装ArcGIS for  De

ArcGIS Engine开发前基础知识(4)

ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想到的是ArcGIS Engine进行开发.实际上,并不是所有的系统都必须采用这种方式,上述的三种开发方式(VBA.DLL和Add-in)在很多的时候也可以考虑. 作为VB的子集,VBA方式采用Visual Basic语言规范,简单易学,开发者只需要关注自己需要而ArcGIS没有直接提供的功能.对于广

ArcGIS Engine中正确释放打开资源

转自原文 ArcGIS Engine中正确释放打开资源 AE中对MDB,SDE等数据库操作时,打开后却往往不能及时释放资源,导致别人操作提示对象被锁定. 很多帖子说了很多原理,看的也烦且不实用,比如一句话概括的用System.Runtime.InteropServices.Marshal.ReleaseComObject(object o)释放,说的很不清楚,很多人试过觉的释放不掉. 事实上,的确是用该方法,但释放的技巧在于,新建几个AE对象就要逐步释放几个,例如: IWorkspaceFact