實作從 Google Earth 讀取圖層資料庫,並在工具面板的 TreeView 中遞迴顯示,支援勾選控制圖層可見性。
protected void ShowLayers() {
Thread.Sleep(500);
FeatureCollectionGE layers = GeApp.GetLayersDatabases();
GEToolPad toolPad = GetToolPad();
toolPad.ShowLayers(layers);
}
public void ShowLayers(FeatureCollectionGE layers) {
if (this.InvokeRequired) {
this.Invoke(new Action(() => InternalShowLayers(layers)));
} else InternalShowLayers(layers);
}
protected void InternalShowLayers(FeatureCollectionGE layers) {
tvLayers.Nodes.Clear();
if (layers == null || layers.Count <= 0) return;
foreach (FeatureGE layer in layers) {
TreeNode node = new TreeNode(layer.Name) { Checked = layer.Visibility > 0, Tag = layer };
ShowChildrenLayers(layer, node);
node.Expand();
tvLayers.Nodes.Add(node);
}
}
protected void ShowChildrenLayers(FeatureGE layer, TreeNode node) {
foreach (FeatureGE child in layer.GetChildren()) {
TreeNode tn = new TreeNode(child.Name) { Checked = child.Visibility > 0, Tag = child };
ShowChildrenLayers(child, tn);
node.Nodes.Add(tn);
}
}
使用 Invoke 確保跨執行緒 UI 更新安全。