AE中FeatureRender的图层渲染

本文介绍如何使用ArcGIS API实现图层的唯一值渲染。通过创建随机颜色渐变并将其应用于图层的特定字段,可以为不同的值设置独特的颜色,从而在地图上清晰地区分不同的特征。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型一:AE:IUniqueValueRendererPtr 实现图层唯一值渲染

 

        IGeoFeatureLayerPtr pGeoFeaLyr;
        CString sFldName = _T("FWID");//列名
        IMapControl2Ptr pMapControl; 
        pMapControl=m_MapCtrl.get_Object();


        pGeoFeaLyr=pMapControl->GetLayer(0);//层索引
        if(pGeoFeaLyr  == NULL) return;

        IQueryFilterPtr pFilter(__uuidof(QueryFilter));
        IFeatureCursorPtr pFeaCur;

        IFeatureClassPtr pFeaCls;
        pGeoFeaLyr->get_FeatureClass(&pFeaCls);
        if( pFeaCls == NULL) return;

        pFeaCur = pFeaCls->Search(pFilter,FALSE);
        if(pFeaCur == NULL) return;
       
        IEnumColorsPtr pEnumColors;
        IRandomColorRampPtr pRanColor(__uuidof(RandomColorRamp));
        pRanColor->put_MinSaturation(20);
        pRanColor->put_MaxSaturation(40);
        pRanColor->put_MinValue(85);
        pRanColor->put_MaxValue(100);
        pRanColor->put_StartHue(76);
        pRanColor->put_EndHue(188);
        pRanColor->put_Size(100);
        VARIANT_BOOL bOk;
        pRanColor->CreateRamp(&bOk);
        if(!bOk) return;
        pRanColor->get_Colors(&pEnumColors);
       
        if(pEnumColors == NULL)  return;
      
     
        IUniqueValueRendererPtr pUniRender(__uuidof(UniqueValueRenderer));
        pUniRender->put_FieldCount(1);
        pUniRender->put_Field(0,(_bstr_t)sFldName);
     
        IColorPtr pColor(__uuidof(RgbColor));
        pColor->put_RGB(RGB(255,0,0));

        ISimpleLineSymbolPtr pSimLineSym;
        pSimLineSym.CreateInstance(__uuidof(SimpleLineSymbol));
        pSimLineSym->put_Color(pColor);
        pSimLineSym->put_Width(0.8);
        pSimLineSym->put_Style(esriSLSDash);

        IFeaturePtr pFeature = pFeaCur->NextFeature();

        while ( pFeature != NULL)
        {
            VARIANT var;
            pFeature->get_Value(2,&var);//列索引
            if(var.bstrVal == (BSTR)"") continue;
            long nValueCount;
            pUniRender->get_ValueCount(&nValueCount);
           
            IColorPtr  pTmpColor;
            pTmpColor = pEnumColors->Next();
            OLE_COLOR rgb;
            pTmpColor->get_RGB(&rgb);
            if (pTmpColor == NULL)
            {
                pEnumColors->Reset();
                pTmpColor = pEnumColors->Next();
            }
           
            ISimpleFillSymbolPtr pSimFillSym(__uuidof(SimpleFillSymbol));
            ISymbolPtr pSymbol;
            pSimFillSym->put_Color(pTmpColor);
            pSimFillSym->PutOutline(pSimLineSym);

            pSymbol=pSimFillSym;

            pUniRender->AddValue((_bstr_t)var,(_bstr_t)var,pSymbol);
            pUniRender->put_Label(_bstr_t("Parcels"));
            pFeature = pFeaCur->NextFeature();
        }

        IFeatureRendererPtr  pFeaRender = (IFeatureRendererPtr)pUniRender;
        pGeoFeaLyr->putref_Renderer(pFeaRender);
        IActiveViewPtr pAV;
        pAV=pMapControl->GetActiveView();
        pAV->Refresh();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值