建立圖層四步驟
- 建立
CMapXFields,對應資料庫欄位新增 Add (名稱、別名、彙總函數、型別)。
- 建立
CMapXBindLayer,指定 RefColumn1 (經度)、RefColumn2 (緯度) 索引,LayerType = miBindLayerTypeXY。
- 呼叫
axMap1.DataSets.Add,傳入 DatasetTypeConstants.miDataSetADO、Recordset、圖層名、主鍵、標簽欄位、BindLayer、Fields、false。
- 取得
Layer 設定 OverrideStyle = true,配置 SymbolType = miSymbolTypeBitmap、SymbolBitmapName (需放在 MapX 安裝目錄 CUSTSYMB)、SymbolBitmapSize、SymbolBitmapTransparent。
完整程式碼
private void DeleteLayerByName(string name)
{
for (int i = 1; i <= axMap1.Layers.Count; i++)
if (axMap1.Layers[i].Name == name) axMap1.Layers.Remove(i);
}
private void CreateNewLayerFromDB(string layerName, ADODB.Recordset rs)
{
DeleteLayerByName(layerName);
var flds = new FieldsClass();
flds.Add("stationid", "theid", AggregationFunctionConstants.miAggregationIndividual, FieldTypeConstants.miTypeString);
flds.Add("address", "address", AggregationFunctionConstants.miAggregationIndividual, FieldTypeConstants.miTypeString);
flds.Add("longitude", "longitude", AggregationFunctionConstants.miAggregationSum, FieldTypeConstants.miTypeNumeric);
flds.Add("latitude", "latitude", AggregationFunctionConstants.miAggregationSum, FieldTypeConstants.miTypeNumeric);
var bindLayer = new BindLayerClass
{
LayerName = layerName,
RefColumn1 = 3, // longitude
RefColumn2 = 4, // latitude
LayerType = BindLayerTypeConstants.miBindLayerTypeXY
};
var ds = axMap1.DataSets.Add(DatasetTypeConstants.miDataSetADO, rs, layerName,
"stationid", "address", bindLayer, flds, false);
var layer = axMap1.Layers._Item(layerName);
layer.OverrideStyle = true;
if (layer.Style.SupportsBitmapSymbols)
{
layer.Style.SymbolType = SymbolTypeConstants.miSymbolTypeBitmap;
layer.Style.SymbolBitmapSize = 60;
layer.Style.SymbolBitmapTransparent = true;
layer.Style.SymbolBitmapName = "icon.BMP";
}
}