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 
转载请保留此信息。




本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2011/10/26/2225048.html ,如需转载请自行联系原作者
相关文章
|
定位技术
97Echarts - 地理坐标/地图(Draw Polygon on Map)
97Echarts - 地理坐标/地图(Draw Polygon on Map)
66 0
|
定位技术
95Echarts - 地理坐标/地图(Binning on Map)
95Echarts - 地理坐标/地图(Binning on Map)
42 0
|
6月前
|
存储 安全 测试技术
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
【Go语言精进之路】构建高效Go程序:了解map实现原理并高效使用
69 3
|
5月前
|
定位技术
vue-baidu-map 自定义地图主题
vue-baidu-map 自定义地图主题
211 0
|
JavaScript 数据可视化 前端开发
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图
276 1
|
7月前
|
前端开发 定位技术 API
|
7月前
|
JavaScript 定位技术
Vue中使用百度地图demo Vue Baidu Map(vue-baidu-map)设置窗口信息
Vue中使用百度地图demo Vue Baidu Map(vue-baidu-map)设置窗口信息
522 0
|
SQL Java 数据库连接
mybatis查询数据时,返回类型设置的map,然后出现这个错误java.lang.NoSuchMethodException: java.util.Map.<init>
mybatis查询数据时,返回类型设置的map,然后出现这个错误java.lang.NoSuchMethodException: java.util.Map.<init>
254 0
|
移动开发 小程序 JavaScript
微信小程序学习实录5(H5嵌入小程序、map组件、地图调起功能、腾讯百度高德导航页、返回web-view页)
微信小程序学习实录5(H5嵌入小程序、map组件、地图调起功能、腾讯百度高德导航页、返回web-view页)
588 0
|
7月前
|
移动开发 定位技术
uniapp组件map地图组件使用
uniapp组件map地图组件使用
380 0