700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C# 基于AE的GIS二次开发实例-----台风信息系统

C# 基于AE的GIS二次开发实例-----台风信息系统

时间:2023-09-21 08:46:47

相关推荐

C# 基于AE的GIS二次开发实例-----台风信息系统

设计任务

课程设计的主要任务是利用GIS公共平台提供的二次开发环境开发一套“台风GIS软件”,在遵循国家台风编码的基础上,实现台风的运动轨迹可视化,以及台风经过区域的经济损失评估。

1.获取台风的各个时刻的空间位置关系;

2.建立空间数据及属性数据库;

3.建立空间数据的查询系统;

4.实现空间分析的基本功能(包括缓冲区分析、叠加分析等);

5.提交书面报告(数据库设计、软件设计流程和软件使用说明等)和台风GIS系统软件运行程序及原始程序代码等。

空间数据库设计与建库

地图分层属性库设计

地价信息表(tf_price)

台风路径(tf_name)

台风信息表(tf_geo)

台风登陆信息表(tf_loacl)

系统功能设计

系统界面设计

主界面

操作界面

地图数字成果

部分代码:

1.按名称进行要素查询/// <summary>/// 名称查询/// </summary>/// <param name="mapControl"></param>/// <param name="index">图层</param>/// <param name="field">字段</param>/// <param name="value">查询值</param>public static void SelectByName(IMapControlDefault mapControl,string layerName, string field, string value){try{ClearSelection(mapControl);//清除选择string selectName = value.Trim();ILayer layer = getFeatureLayer(mapControl, layerName);//获取对应图层IFeatureLayer featureLayer = layer as IFeatureLayer;IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();//查询对象实例化IFeatureCursor featureCursor;IFeature feature = null;string str = field + " = '" + selectName+"'" ;//创建查询语句queryFilter.WhereClause = str;featureCursor = featureClass.Search(queryFilter, true);//进行查询操作feature = featureCursor.NextFeature();//下一个得到查询要素if (null != feature){mapControl.Map.SelectFeature(layer, feature);//地图高亮显示mapControl.Refresh(esriViewDrawPhase.esriViewGeoSelection, null, null);//刷新}}catch (System.Exception ex){MessageBoxEX.Show("依据名称查询选中要素失败!"+ex);}}2.查询指定条件下的属性表信息显示/// <summary>/// 查询指定条件下的属性表信息显示,默认字段去除/// </summary>/// <param name="mapControl">map控件</param>/// <param name="index">图层</param>/// <param name="field">属性值</param>/// <param name="value">条件值</param>/// <returns>DataTable</returns>public static DataTable FeatureTableByName(IMapControlDefault mapControl, string lyerName, string field, string value){DataTable pTable = new DataTable();//建立一个tablestring selectName = value.Trim();//查询条件try{IFeatureLayer featureLayer = getFeatureLayer(mapControl, lyerName);//获取图层IFields pFields = featureLayer.FeatureClass.Fields;//获取要素类字段int log = -1;for (int i = 0; i < pFields.FieldCount; i++) //FieldCount字段集合中的字段数{pTable.Columns.Add(pFields.get_Field(i).AliasName);//datatable添加字段if (pFields.get_Field(i).AliasName.ToString() == "SHAPE"){ log = i; }//记录“Shape”行。}//创建一个新的查询过滤器IFeatureClass featureClass = featureLayer.FeatureClass;IQueryFilter queryFilter = new QueryFilterClass();//查询IFeatureCursor featureCursor;IFeature feature = default(IFeature);string str = field + " = '" + selectName + "'";//查询语句queryFilter.WhereClause = str;featureCursor = featureClass.Search(queryFilter, true);//查询执行feature = featureCursor.NextFeature();//获取查询第一个要素while (feature != null){DataRow newRow = pTable.NewRow();string featapye = feature.Shape.GeometryType.ToString();//获取要素类类型名for (int i = 0; i < pFields.FieldCount; i++){if (log != i){newRow[i] = feature.get_Value(i).ToString();//每行要素赋值给datatable}else{newRow[i] = featapye;//要素类型赋值}}pTable.Rows.Add(newRow);feature = featureCursor.NextFeature();//下一个要素}ShowByFilter(mapControl, featureLayer, str);//只显示满足条件的要素}catch (System.Exception ex){MessageBoxEX.Show("查询指定条件下的属性表信息失败!" + ex.Message);}return pTable;}3.基于GP工具的缓冲区分析/// <summary>/// 单个缓冲区分析/// </summary>/// <param name="mapControl">map控件</param>/// <param name="name">文件名</param>/// <param name="distances">缓冲半径</param>public static void Buffer(IMapControlDefault mapControl,string distances,string name){string outPath = appPath+ ""+ name + distances + "_Buffer.shp";IFeatureLayer featureLayer = getFeatureLayer(mapControl, "台风路径");Geoprocessor gp = new Geoprocessor(); //初始化Geoprocessorgp.OverwriteOutput = true; //允许运算结果覆盖现有文件try{ESRI.ArcGIS.AnalysisTools.Buffer pBuffer = new ESRI.ArcGIS.AnalysisTools.Buffer(); //定义Buffer工具pBuffer.in_features = featureLayer; //输入对象,既可是IFeatureLayer对象,也可是完整文件路径如“D://data.shp”pBuffer.out_feature_class = outPath; //输出对象,一般是包含输出文件名的完整文件路径//设置缓冲区的大小,即可是带单位的具体数值,如0.1 Decimal Degrees;也可是输入图层中的某个字段,如“BufferLeng”pBuffer.buffer_distance_or_field = "" + distances + " Kilometers"; //缓冲区参数pBuffer.dissolve_option = "NONE"; //支持融合缓冲区重叠交叉部分gp.Execute(pBuffer, null); //执行缓冲区分析//添加结果到窗口string pFolder = System.IO.Path.GetDirectoryName(outPath); //得到字符串中文件夹位置string pFileName = System.IO.Path.GetFileName(outPath); //得到字符串中文件名字mapControl.AddShapeFile(pFolder, pFileName); //往地图控件里添加文件mapControl.ActiveView.Refresh(); //激活窗口刷新}catch (Exception ex){MessageBoxEX.Show("警告", "缓冲分析失败!" + ex.ToString());}}4.唯一值生成渲染色带/// <summary>/// 构建色带/// </summary>/// <param name="size">色带个数</param>/// <returns></returns>private static IAlgorithmicColorRamp GetColorRgb(int size){IColor fromColor = null, toColor = null;fromColor = ConvertNETColorToAEColor(Color.Yellow);//起始颜色toColor = ConvertNETColorToAEColor(Color.Red);//终止颜色IAlgorithmicColorRamp algCR = new AlgorithmicColorRampClass();algCR.Size = size;//生成渲染个数bool nFlag;//设置色带生成算法algCR.Algorithm = esriColorRampAlgorithm.esriLabLChAlgorithm;algCR.FromColor = fromColor; algCR.ToColor = toColor;algCR.CreateRamp(out nFlag);return algCR;}/// <summary>/// 唯一值渲染图层/// </summary>/// <param name="pFeatureLayer">矢量图层</param>/// <param name="pUniqueFieldName">唯一值字段</param>public static void UniqueValueRender(IMapControlDefault mapControl,string layerName, string pUniqueFieldName){IFeatureLayer pFeatureLayer = getFeatureLayer(mapControl, layerName);//获取要素图层IGeoFeatureLayer pGeoLayer = pFeatureLayer as IGeoFeatureLayer;if (pGeoLayer == null) return;ITable pTable = pGeoLayer.FeatureClass as ITable;//得到属性表ICursor pCursor;IQueryFilter pQueryFilter = new QueryFilter();//查询pQueryFilter.AddField(pUniqueFieldName);pCursor = pTable.Search(pQueryFilter, true);//获取字段IEnumerator pEnumreator;//获取字段中各要素属性唯一值IDataStatistics pDataStatistics = new DataStatisticsClass();pDataStatistics.Field = pUniqueFieldName;//获取统计字段pDataStatistics.Cursor = pCursor;pEnumreator = pDataStatistics.UniqueValues;int fieldcount = pDataStatistics.UniqueValueCount;//唯一值个数,以此确定颜色带范围IUniqueValueRenderer pUniqueValueR = new UniqueValueRendererClass();pUniqueValueR.FieldCount = 1;//单值渲染pUniqueValueR.set_Field(0, pUniqueFieldName);//渲染字段IEnumColors pEnumColor = GetColorRgb(fieldcount).Colors;pEnumColor.Reset();while (pEnumreator.MoveNext()){string value = pEnumreator.Current.ToString();if (value != null){IColor pColor = pEnumColor.Next();ISymbol pSymbol = GetDefaultSymbol(pFeatureLayer.FeatureClass.ShapeType, pColor);//获取默认符号pUniqueValueR.AddValue(value, pUniqueFieldName, pSymbol);}}pGeoLayer.Renderer = pUniqueValueR as IFeatureRenderer;}

数据是中国天气网(台风)爬的

地图是自己数字化的!!!!!!

界面自己设计的

代码自己敲的,

不会的全百度的!!!!!

OVER.....................

源码地址:/download/qq_40953393/43046832

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。