经过前面一段时间狂乱的baidu&google,目前ArcEngine开的项目算是完成了基本的外观,这次解决的问题是从CAD导成shp文件后,先前在CAD中定义的颜色也是可以读取到的,只不过它的Color值是采用的 ACI 规范,需要转换成RGB我们才方便使用。当然主要的问题是MapControl导入shp文件时,它给每个图层中要素的颜色是随机的,不是原图中所定义的颜色,所以我们需要这样在google中搜索"ArcEngine 修改 图层颜色","ArcEngine 自定义要素颜色",又是一阵狂乱的搜索,当然也能找到一些信息,但最后还是在看那个E文的MSDN帮助时找到了解决办法。上面直接有一例子,这里做了一些修改,贴出来:
public static void DefineFeatureColor(IGeoFeatureLayer pGeoFeatureLayer, string fieldName)
{
//Make the renderer.
IUniqueValueRenderer pUniqueValueRenderer = new UniqueValueRendererClass();
//These properties should be set prior to adding values.
pUniqueValueRenderer.FieldCount = 1;
pUniqueValueRenderer.set_Field(0, fieldName);
IDisplayTable pDisplayTable = pGeoFeatureLayer as IDisplayTable;
IFeatureCursor pFeatureCursor = pDisplayTable.SearchDisplayTable(null, false) as IFeatureCursor;
IFeature pFeature = pFeatureCursor.NextFeature();
bool ValFound;
int fieldIndex;
IFields pFields = pFeatureCursor.Fields;
fieldIndex = pFields.FindField(fieldName);
while (pFeature != null)
{
string classValue = pFeature.get_Value(fieldIndex).ToString();
IColor color = ColorUtilities.GetColorByACI(Int16.Parse(classValue));
IRgbColor rgb = color as IRgbColor;
//System.Console.WriteLine("KVL:" + classValue+"-->RGB"+ rgb.Red + "," + rgb.Green + "," + rgb.Blue);
ISymbol pClassSymbol = getSymbolByShapType(pGeoFeatureLayer.FeatureClass.ShapeType, color);
//Test to see if this value was added
//to the renderer. If not, add it.
ValFound = false;
for (int i = 0; i <= pUniqueValueRenderer.ValueCount - 1; i++)
{
if (pUniqueValueRenderer.get_Value(i) == classValue)
{
ValFound = true;
break; //Exit the loop if the value was found.
}
}
//If the value was not found, it is new and it will be added.
if (ValFound == false)
{
pUniqueValueRenderer.AddValue(classValue, fieldName, pClassSymbol as ISymbol);
pUniqueValueRenderer.set_Label(classValue, classValue);
pUniqueValueRenderer.set_Symbol(classValue, pClassSymbol as ISymbol);
}
pFeature = pFeatureCursor.NextFeature();
}
//'** If you didn't use a predefined color ramp
//'** in a style, use "Custom" here. Otherwise,
//'** use the name of the color ramp you selected.
pUniqueValueRenderer.ColorScheme = "Custom";
ITable pTable = pDisplayTable as ITable;
bool isString = pTable.Fields.get_Field(fieldIndex).Type == esriFieldType.esriFieldTypeString;
pUniqueValueRenderer.set_FieldType(0, isString);
pGeoFeatureLayer.Renderer = pUniqueValueRenderer as IFeatureRenderer;
//This makes the layer properties symbology tab
//show the correct interface.
IUID pUID = new UIDClass();
pUID.Value = "{683C994E-A17B-11D1-8816-080009EC732A}";
pGeoFeatureLayer.RendererPropertyPageClassID = pUID as UIDClass;
}
上面的代码大部分来自帮助文档中的例子,做了一些逻辑上的修改,就是把原例子中的Random颜色换成读取要素Color转成RGB再渲染。参数fieldName其实可以不用要,我这里就是"Color"这个字段名。
分享到:
相关推荐
项目需求需要上传shp文件然后在地图上展示,网上找了很多,发现大多数描述的都不完整,代码给的也不完整。所以自己整理了一下将主要的代码分享出来
【数据分享】丝绸之路-天地图专题数据图层shp文件
国内各个江河水系图层shp文件
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形,每一个都有他们各自的属性。 shape文件由ESRI开发,一个...
Shp格式文件导入奥维互动地图步骤及主要设置
中国+世界 shp文件,非常适合开发以及导入到arcgis中
.shp文件是地图的常见格式,该打包的Java工程文件可以读shape文件获得图形的坐标并写入,并将坐标写入文件中
一个SHP文件内涉及多个要素,如果手动将要素一个一个转换为KML,麻烦且费时长。此工具能根据某个字段里的值将一个SHP里不同要素分别输出转换为1个KML,快捷省时。如某个SHP里有两个要素,要素的其中一个属性字段为...
1.安装mysql5.1略 2.安装geoserver2.3.1 略 3.准备shp文件shp2mysql_0_4.zip文件,里面有三个文件,将cygwin1.dll复制到window/system32或syswow64目录下。双击运行DOShere文件。...5.将sql文件导入到mysql中
最近在学习导入外部数据的时候,总是不能实现将SHP文件导入到工作空间中生成一个独立的要素类,不过今天成功了
SHP文件生成界址点信息表(文件中需要JCBH字段,为出表顺序)SHP文件生成界址点信息表(文件中需要JCBH字段,为出表顺序)SHP文件生成界址点信息表(文件中需要JCBH字段,为出表顺序)SHP文件生成界址点信息表(文件...
美国各州行政面的shp图层,附有中文城市名称,美国各州ne_110m_admin_1_states_provinces_shp,50个州,
在平时导入数据的时候,有些数据放在多个文件加下,本范例示范了如何批量导入这些文件夹下的SHP数据,并且设计了每隔1分钟执行1次导入操作。
北京各区县shp文件.rar
客官您好! 文件中包含了我国最新的34省、直辖市、特别行政区首府驻地点要素文件,也就是矢量数据shp文件,可用GIS软件打开。精心制作,良心数据,安心购买!
android 使用GIS加载shp文件例子,ArcGIS Runtime SDK for Android
java使用geotools解析shp文件,内容包含 解析方法,使用的各种jar包,以及单区域shp和多区域shp文件
吉林省各区县shp文件.rar
运用matlab读取.shp文件并分块提取坐标信息,绘制各块的图形并保存坐标
中国乡镇边界面图层SHP文件,包括点图层和面图层,资料精度还可以。