zoukankan      html  css  js  c++  java
  • Map 3D中程序设置地图中心点

    你可能需要在Map 3D中通过程序把某块地图拉到屏幕中央来,下面通过程序的方式来实现这个功能。

    这里有两种情况,如果你在Map 3D中通过Data Connect连接到了一下FDO数据源(SDF、SHP、Oracle Spatial等等),并把他们加入到了地图上,这时你可以使用AcMapMap.ZoomToExtent方法,他接受一个MgEnvelope对象。但如果你么有FDO数据源,那么你就得用AutoCAD API来做了。

    下面是实现代码:

            [CommandMethod("ZoomCenter")]
            public void ZoomCenter()
            {
    
                Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
                Database db = doc.Database;
                Editor ed = doc.Editor;
    
                Point3d centerPt;
                PromptPointOptions ppo = new PromptPointOptions("Click on map to zoom center:");
                PromptPointResult ppr = ed.GetPoint(ppo);
                if (ppr.Status == PromptStatus.OK)
                {
                    centerPt = ppr.Value;
    
                    AcMapMap map = AcMapMap.GetCurrentMap();
                    MgEnvelope mapExtent = map.GetMapExtent();
    
                    //There are some FDO feature source connected 
                    if (!mapExtent.IsNull())
                    {
                        double centerX = mapExtent.LowerLeftCoordinate.X + mapExtent.Width / 2;
                        double centerY = mapExtent.LowerLeftCoordinate.Y + mapExtent.Height / 2;
    
                        ed.WriteMessage("center:" + centerX.ToString() + "," + centerY.ToString() + "\n");
    
                        MgEnvelope newExtent = new MgEnvelope(centerPt.X - mapExtent.Width / 2,
                                                        centerPt.Y - mapExtent.Height / 2,
                                                        centerPt.X + mapExtent.Width / 2,
                                                        centerPt.Y + mapExtent.Height / 2);
    
                        map.ZoomToExtent(newExtent);
                    }
                    else
                    {
                        //no FDO data source, use AutoCAD API
    
                        using (Transaction Tx = db.TransactionManager.StartTransaction())
                        {
                            ed.UpdateTiledViewportsInDatabase();
    
                            ViewportTableRecord viewportTableRec = Tx.GetObject(ed.ActiveViewportId, OpenMode.ForWrite) as ViewportTableRecord;
    
                            viewportTableRec.CenterPoint = new Point2d(centerPt.X, centerPt.Y);
    
                            ed.UpdateTiledViewportsFromDatabase();
    
                            Tx.Commit();
                        }
    
                    }
    
    
                }
    
            }
    
    作者:峻祁连
    邮箱:junqilian@163.com
    出处:http://junqilian.cnblogs.com
    转载请保留此信息。
  • 相关阅读:
    避免因为Arcgis Server服务设置不当导致Oracle Process溢出的方法
    ArcSOC进程数不断增长导致oracle processes溢出原因分析
    PostgreSQL中的Toast Pointer
    SQLite中字段顺序和PAGE_SIZE对性能的影响
    PG数据库CPU和内存满负荷运转优化案
    ArcGIS Server浏览地图服务无响应原因分析说明
    PythonWeb全栈开发-虚拟环境搭建
    C 语言学习——错误处理
    C 语言学习——Valgrind 内存问题简述
    HTML学习--拖放API实现拖放排序
  • 原文地址:https://www.cnblogs.com/junqilian/p/2225048.html
Copyright © 2011-2022 走看看