ArcEngine实现动态加载地图

本文详细介绍了如何使用ArcEngine实现动态加载地图,包括获取关键图层、确定范围、存储属性信息、判断点是否在可视范围、动态添加影像数据、控制图层数量以及从数据库加载数据等步骤。
摘要由CSDN通过智能技术生成

动态加载地图

说一下主要思想:通过判断相关点是否在视图范围,并且达到某一地图比例尺时加载相应范围的地图(需要有相应基础才能看懂本文章)。

1.首先得到关键点的图层

m_Map= axMapControl.Map;
            int l = 0;
            int f = 0;
            for (int j = 0; j < m_Map.LayerCount; j++)
            {
                if (m_Map.get_Layer(j).Name =="Points")
                {
                    l = j;//获得Points图层
                }
            }


2.取得该范围

double xmax = env.XMax;
            double ymax = env.YMax;
            double xmin = env.XMin;
            double ymin = env.YMin;


3.经纬度以及名称字段的属性信息存入arraylist

ArrayListaList = new ArrayList();
            ArrayList bList = new ArrayList();
            ArrayList nList = new ArrayList();
          
            IFeatureLayer ilayer =(IFeatureLayer)m_Map.get_Layer(l);//得到点图层
            IFeatureCursor pFeatureCursor;
            pFeatureCursor =ilayer.FeatureClass.Search(null, false);
            IFeature pFeature;
            pFeature =pFeatureCursor.NextFeature();
            while (pFeature != null)
            {
                string jdValue =Convert.ToString(pFeature.get_Value(4));
                string wdValue =Convert.ToString(pFeature.get_Value(5));
                string name =Convert.ToString(pFeature.get_Value(2));
                pFeature = pFeatureCursor.NextFeature();
                aList.Add(jdValue);//经纬度以及name存入arraylist
                bList.Add(wdValue);
                nList.Add(name);
            }


4.遍历arraylist并判断点是否在可视范围内

if(m_Map.MapScale < 400000)
            {
                for (int j = 0; j < 35; j++)
                {
                    double jd =double.Parse(aList[j].ToString());
                    double wd =double.Parse(bList[j].ToString());
                    //判断土层中是否已经存在某个影像数据,若存在则不进行坐标的判断
                    if (jd >= xmin&& jd <= xmax)
                    {
                        if (wd >= ymin&& wd <= ymax)
                        {  nameid = nList[j].ToString();//获得name属性
                            for (int q = 0; q< axMapControl.Map.LayerCount; q++)
                            {
                                temp = getname== nameid + ".tif";
                              
                                getname =Convert.ToString(axMapControl.get_Layer(q).Name);
                                if(temp)
                                indexa = q - 1;                                 
                               
                            }


5.调用添加影像数据函数dynamicadd()(目前是本地)

//动态加载删格数据
        public void dynamicadd(string strFullPath)
        {
            int Index = strFullPath.LastIndexOf("\\");
            string fileName = strFullPath.Substring(Index + 1);
            string filePath = strFullPath.Substring(0, Index);
            IWorkspaceFactory workspaceFactory =newRasterWorkspaceFactory();
            IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(filePath,0);
            IRasterDataset rasterDataset = (IRasterDataset)rasterWorkspace.OpenRasterDataset(fileName);
            IRasterLayer rasterLayer =newRasterLayerClass();
           rasterLayer.CreateFromDataset(rasterDataset);
            axMapControl.AddLayer(raster
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值