您的位置:首页 > 编程语言 > C#

C#调用google earth 参考代码4

2012-04-18 22:25 330 查看
1)增加鼠标滚轮支持,可以实现放大、缩小。此功能利用上一篇提供的HookAPI.dll实现

2)读取PlaceMarks(Google Earth界面中的位置)并显示、隐藏

3)读取所有图层,显示并隐藏

下面,继续放代码:

1、鼠标滚轮事件,实现放大、缩小
1: ...

2: // 放大

3: private const long ZoomIn = 0x00780000;

4: // 缩小

5: private const long ZoomOut = 0xFF880000;

6: ...

7: mouseHook.MouseWheel += new MouseEventHandler(mouseHook_MouseWheel);

8: ...

9: /// <summary>

10: /// 鼠标钩子。鼠标滚动事件

11: /// </summary>

12: /// <param name="sender"></param>

13: /// <param name="e"></param>

14: void mouseHook_MouseWheel(object sender, MouseEventArgs e)

15: {

16:     IntPtr hWnd = NativeMethods.WindowFromPoint(e.Location);

17:     if (hWnd == this.GeRenderHWnd)

18:     {

19:         Point point = this.Control.PointToClient(e.Location);

20:         // 如果鼠标位置在控件内部,则说明鼠标在GoogleEarth视图范围内进行了滚动

21:         if (this.Control.ClientRectangle.Contains(point))

22:         {

23:             NativeMethods.PostMessage(GeRenderHWnd, (int)WM_MOUSE.WM_MOUSEWHEEL, e.Delta == 120 ? ZoomIn : ZoomOut, 0);

24:         }

25:     }

26: }


2、读取PlaceMarks

Google Earth COM API中提供了两个读取PlaceMarks的函数。一个是GetTemporaryPlaces(),用来读取临时位置;另一个是GetMyPlaces(),用来读取自定义位置,即GoogleEarth中显示的“我的位置”。呵呵

1: ...

2: /// <summary>

3: /// 显示位置“PlaceMarks”。位置分为两种,一种时TemporaryPlaces,另一种为MyPlaces

4: /// </summary>

5: protected void ShowPlaces()

6: {

7:     Thread.Sleep(500);

8:     // 获取MyPlaces

9:     FeatureGE myPlace = GeApp.GetMyPlaces();

10:     // 获取临时位置

11:     FeatureGE temporaryPlace = GeApp.GetTemporaryPlaces();

12:     //

13:     List<FeatureGE> places = new List<FeatureGE>();

14:     places.Add(myPlace);

15:     places.Add(temporaryPlace);

16:

17:     // 获取工具面板

18:     GEToolPad toolPad = GetToolPad();

19:     // 显示所有位置

20:     toolPad.ShowPlaces(places);

21: }

22: ...

23: /// <summary>

24: /// 显示所有PlaceMarks(位置)

25: /// </summary>

26: /// <param name="places"></param>

27: public void ShowPlaces(List<FeatureGE> places)

28: {

29:     if (this.InvokeRequired)

30:     {

31:         Action method = delegate {

32:             InternalShowPlaces(places);

33:         };

34:

35:         try

36:         {

37:             this.Invoke(method);

38:         }

39:         catch { }

40:     }

41:     else

42:     {

43:         InternalShowPlaces(places);

44:     }

45: }

46: /// <summary>

47: /// 显示所有PlaceMarks(位置)。被ShowPlaces函数调用

48: /// </summary>

49: /// <param name="places"></param>

50: protected void InternalShowPlaces(List<FeatureGE> places)

51: {

52:     this.tvPlaces.Nodes.Clear();

53:

54:     if (places == null || places.Count <= 0)

55:         return;

56:

57:     foreach (FeatureGE place in places)

58:     {

59:         TreeNode node = new TreeNode(place.Name);

60:         node.Checked = place.Visibility > 0;

61:         node.Tag = place;

62:

63:         ShowChildrenPlaces(place, node);

64:

65:         node.Expand();

66:

67:         this.tvPlaces.Nodes.Add(node);

68:     }

69: }

70: /// <summary>

71: /// 显示指定PlaceMark的子PlaceMark

72: /// </summary>

73: /// <param name="place">父PlaceMark</param>

74: /// <param name="node">父节点</param>

75: protected void ShowChildrenPlaces(FeatureGE place, TreeNode node)

76: {

77:     FeatureCollectionGE places = place.GetChildren();

78:

79:     foreach (FeatureGE child in places)

80:     {

81:         TreeNode tn = new TreeNode(child.Name);

82:         tn.Checked = child.Visibility > 0;

83:         tn.Tag = child;

84:

85:         ShowChildrenPlaces(child, tn);

86:

87:         node.Nodes.Add(tn);

88:     }

89: }

3、读取图层

1: ...

2: /// <summary>

3: /// 显示图层

4: /// </summary>

5: protected void ShowLayers()

6: {

7:     Thread.Sleep(500);

8:     // 获取所有图层信息

9:     FeatureCollectionGE layers = GeApp.GetLayersDatabases();

10:     // 获取工具面板

11:     GEToolPad toolPad = GetToolPad();

12:     //显示所有图层

13:     toolPad.ShowLayers(layers);

14: }

15: ...

16: /// <summary>

17: /// 将给定的图层集合显示在“图层”选项卡的树形控件中

18: /// </summary>

19: /// <param name="layers">图层集合</param>

20: public void ShowLayers(FeatureCollectionGE layers)

21: {

22:     if (this.InvokeRequired)

23:     {

24:         Action method = delegate {

25:             InternalShowLayers(layers);

26:         };

27:         try

28:         {

29:             this.Invoke(method);

30:         }

31:         catch { }

32:     }

33:     else

34:   {

35:         InternalShowLayers(layers);

36:     }

37: }

38: /// <summary>

39: /// 将给定的图层集合显示在“图层”选项卡的树形控件中.被公共函数ShowLayers调用

40: /// </summary>

41: /// <param name="layers"></param>

42: protected void InternalShowLayers(FeatureCollectionGE layers)

43: {

44:     this.tvLayers.Nodes.Clear();

45:

46:     if (layers == null || layers.Count <= 0)

47:     {

48:         return;

49:     }

50:

51:     foreach (FeatureGE layer in layers)

52:     {

53:       TreeNode node = new TreeNode(layer.Name);

54:         node.Checked = layer.Visibility > 0;

55:         node.Tag = layer;

56:

57:         ShowChidrenLayers(layer, node);

58:

59:         node.Expand();

60:

61:         this.tvLayers.Nodes.Add(node);

62:   }

63: }

64: /// <summary>

65: /// 显示指定图层的子图层

66: /// </summary>

67: /// <param name="layer">当前图层</param>

68: /// <param name="node">当前节点</param>

69: protected void ShowChidrenLayers(FeatureGE layer, TreeNode node)

70: {

71:     FeatureCollectionGE layers = layer.GetChildren();

72:

73:     foreach (FeatureGE child in layers)

74:     {

75:         TreeNode tn = new TreeNode(child.Name);

76:         tn.Checked = child.Visibility > 0;

77:         tn.Tag = child;

78:

79:         ShowChidrenLayers(child, tn);

80:

81:         node.Nodes.Add(tn);

82:     }

83: }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: