先看下效果(视频有点虚,将就这看。。):
//读取当前所有书签名称 public static List<String> LoadBookmarks(ISceneBookmarks
pSceneBookmarks) {
List<String> bookmark =new List<string> ();
//Search
through all the bookmarks
ESRI.ArcGIS.esriSystem.IArray array = pSceneBookmarks.Bookmarks;
for (int i =
0; i < array.Count; i++)
{
ESRI.ArcGIS.Analyst3D.IBookmark3D bookmark3D =
(ESRI.ArcGIS.Analyst3D.IBookmark3D)array.get_Element(i); // Explicit Cast
bookmark.Add(bookmark3D.Name);
}
return
bookmark; }
//创建一个新的书签
private string CreateNewBookmarkName(IGlobe pGlobe) { //Add the bookmark to the sceneBookmarks ESRI.ArcGIS.Analyst3D.ISceneBookmarks sceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)pGlobe; string sName = "书签" + Convert.ToString(sceneBookmarks.BookmarkCount+1); sName = TheSameName(sName, pGlobe); //检查是否书签有重名,如果有,自动在后面+"_1" return sName; }
/// <summary> /// 追加一个书签到场景 /// </summary> /// <param name="bookmarkName">A System.String that is the name of the bookmark to add to the collecton.</param> /// <param name="pGlobe">The IGlobe interface used in setting up the Bookmark3D.</param> /// <returns>An ISceneBookmarks interface. </returns> /// <remarks>Scenebookmarks are used to store visual snapshots (orientation, zoom level, etc.) for a Scene.</remarks> private ESRI.ArcGIS.Analyst3D.ISceneBookmarks AddBookmark3DToSceneBookmarks(System.String bookmarkName, IGlobe pGlobe) {
//Create the bookmark ESRI.ArcGIS.Analyst3D.IBookmark3D bookmark3D = new ESRI.ArcGIS.Analyst3D.Bookmark3DClass(); bookmark3D.Name = bookmarkName; bookmark3D.Capture(pGlobe.GlobeDisplay.ActiveViewer.Camera);
//Add the bookmark to the sceneBookmarks ESRI.ArcGIS.Analyst3D.ISceneBookmarks sceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)pGlobe; sceneBookmarks.AddBookmark(bookmark3D);
return sceneBookmarks; }
//删除选中的书签 private void btnRemoveBookmark_Click(object sender, EventArgs e) { //string sBookmarkName = lstBookmarks.SelectedItem as string; ESRI.ArcGIS.Analyst3D.ISceneBookmarks sceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)m_pGlobe; IBookmark3D pBookmark3D = null; //sceneBookmarks.FindBookmark(sBookmarkName, out pBookmark3D); if (pBookmark3D != null) { sceneBookmarks.RemoveBookmark(pBookmark3D); } //LoadBookmarks(sceneBookmarks, true); }
//根据书签的名称定位
private void BookLightZoom(string bookLightName) {
ESRI.ArcGIS.Analyst3D.ISceneBookmarks sceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)this._AxGlobeControl.Globe; IBookmark3D pBookmark3D = null; sceneBookmarks.FindBookmark(bookLightName, out pBookmark3D); if (pBookmark3D == null) return; //缩放到书签 //pBookmark3D.Apply(m_pGlobe.GlobeDisplay.ActiveViewer as ISceneViewer, true, 3.0); //无动态效果 GlobeUtility.ZoomToBookmark(this._AxGlobeControl.Globe.GlobeDisplay, pBookmark3D, 3); //有动态效果,关于GlobeUtility想要的请加群,代码太多没办法贴出不方便。 }
/// <summary> /// 得到书签 ///
</summary> /// <param
name="pSceneBookmarks"></param>
private void
LoadBookmarks(ISceneBookmarks pSceneBookmarks)
{
//Search
through all the bookmarks
ESRI.ArcGIS.esriSystem.IArray array = pSceneBookmarks.Bookmarks;
System.Int32
bookmarkIndex = 0;
System.Int32
i = array.Count;
for
(bookmarkIndex = 0; bookmarkIndex < i; bookmarkIndex++)
{
ESRI.ArcGIS.Analyst3D.IBookmark3D bookmark3D =
(ESRI.ArcGIS.Analyst3D.IBookmark3D)array.get_Element(bookmarkIndex); // Explicit
Cast
//lstBookmarks.Items.Add(bookmark3D.Name);
}
}
在窗体去调用这个 /// <summary> /// 窗体初始化对书签的加载 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void BookLightLoad() { ESRI.ArcGIS.Analyst3D.ISceneBookmarks pSceneBookmarks = (ESRI.ArcGIS.Analyst3D.ISceneBookmarks)m_pGlobe; LoadBookmarks(pSceneBookmarks); }
WPF、AE技术交流群:94234450
WPF+ArcGIS 静态、动态定位(静态、动态书签),布布扣,bubuko.com
原文:http://www.cnblogs.com/BeiJing-Net-DaiDai/p/3616158.html