首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ArcEngine C# 二次開發:單值渲染後圖層空白問題排查

     編輯:程式設計綜合問答

現象:點 Shapefile 正常顯示,基於屬性字段進行單值渲染 (UniqueValueRenderer) 後,地圖變空白。

關鍵疑點:幾何類型與符號不匹配

截圖顯示渲染配置中:
- C 類水平、B 類水平使用 **面符號** (SimpleFillSymbol)。
- 但原始圖層為 **點圖層** (PointShp)。

根本原因

  • 點圖層**必須使用點符號** (SimpleMarkerSymbol、CharacterMarkerSymbol、PictureMarkerSymbol)。
  • 面符號 (FillSymbol) 僅適用於面幾何 (Polygon),套用到點幾何無渲染輸出 → 空白。

修正步驟

  1. 確認圖層幾何類型:
    IGeoFeatureLayer geoLayer = (IGeoFeatureLayer)layer;
    esriGeometryType type = geoLayer.FeatureClass.ShapeType; // 應為 esriGeometryPoint
  2. 構建點符號渲染器:
IUniqueValueRenderer uvRenderer = new UniqueValueRendererClass();
uvRenderer.FieldCount = 1;
uvRenderer.set_Field(0, "WaterLevelClass"); // 渲染字段

// 為每個類別創建點符號
ISimpleMarkerSymbol markerA = new SimpleMarkerSymbolClass();
markerA.Style = esriSimpleMarkerStyle.esriSMSCircle;
markerA.Color = GetRGBColor(255, 0, 0); // 紅色
markerA.Size = 10;

ISimpleMarkerSymbol markerB = new SimpleMarkerSymbolClass();
// ... 配置 B 類符號

uvRenderer.AddValue("A", "", markerA);
uvRenderer.AddValue("B", "", markerB);
// ...

geoLayer.Renderer = (IFeatureRenderer)uvRenderer;
activeView.PartialRefresh(esriViewDrawPhase.esriViewDrawGeography, null, null);

其他常見空白原因

  • 渲染字段名拼寫錯誤 / 大小寫不匹配 / 字段值為 null。
  • AddValue 的值與數據實際值不一致 (如數據為 "1","2" 但代碼用 "A","B")。
  • 未調用 PartialRefresh 或 Refresh 更新視圖。
  • 圖層不可見 (ILayer.Visible = false) 或被其他圖層遮擋。

核心修正:**點圖層配點符號,面圖層配面符號,線圖層配線符號。** 符號類型必須與幾何類型嚴格對應。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved