欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏ArcGIS应用与开发ArcGIS其它 → 正文
C++开发Mo常用功能代码
07-11-15 09:07:59 作者: 出处:

1.创建新图层,打开图层

  //创建新图层
   double m_Lon,m_Lat;
   IMoDataConnectionPtr  pMoCon;
   IMoTableDescPtr     desc;
   IMoPointPtr         point;
   ADOTable1->First();


     pMoCon=(IDispatch*)CreateOleObject("MapObjects2.DataConnection");
     desc=(IDispatch*)CreateOleObject("MapObjects2.TableDesc");
     pMoCon->Database=WideString(" c:\\gis\\shp\\beijinmap");        //设置图层目录
      

if(pMoCon->Connect())
        {
       //创建新图层,设置名称、类型及字段。

        desc->set_FieldCount(6);
        desc->set_FieldType(0,moString);
        desc->set_FieldName(0,WideString("ID"));
        desc->set_FieldLength(0,5);  
        desc->set_FieldType(1,moString);
        desc->set_FieldName(1,WideString("AID"));
        desc->set_FieldLength(1,10);
        desc->set_FieldType(2,moString);
        desc->set_FieldName(2,WideString("BID"));
        desc->set_FieldLength(2, 10);
        desc->set_FieldType(3,moString);
        desc->set_FieldName(3,WideString("CID"));
        desc->set_FieldLength(3, 3);
        desc->set_FieldType(4,moString);
        desc->set_FieldName(4,WideString("DID"));
        desc->set_FieldLength(4, 8);
        desc->set_FieldType(5,moString);
        desc->set_FieldName(5,WideString("FLAG"));

        desc->set_FieldLength(5,3);


         //设置图层的记录集
        IMoGeoDatasetPtr geoDataset;
        geoDataset=pMoCon->AddGeoDataset(WideString("水系层"),moShapeTypePoint,desc);
        layer=(IDispatch*)CreateOleObject("MapObjects2.MapLayer");

 

        layer->set_GeoDataset(geoDataset);
        IMoRecordsetPtr recs(layer->Records);


        point=(IDispatch*)CreateOleObject("MapObjects2.Point");

        
        for(int i=1;i<=60;i++) //写记录数
        {

         recs->AddNew();
         String ID=ADOTable1->FieldByName("ID")->AsString;
        .....
          point->set_X(StrToFloat(ADOTable1->FieldByName("LONG")->AsString));
          point->set_Y(StrToFloat(ADOTable1->FieldByName("LAT")->AsString));
          recs->Fields->Item(TVariant("Shape"))->set_Value((TVariant)(IDispatch*)point);
          recs->Fields->Item(TVariant("ID"))->set_Value((TVariant)ID);

          recs->_Update();
          ADOTable1->Next();

         
          }
         recs->StopEditing();
//--------------------------------------------------------------------
       Map1->Layers->Add(layer);      
       Map1->CenterAt( point->get_X(),point->get_Y());
      

    }

}

 


2.放大,缩小,全图,漫游

       if (ZoomInBtn->Down)
        {
          IMoRectanglePtr trackRect = Map1->TrackRectangle();
          Map1->ControlInterface->Extent = trackRect;
          Map1->CenterAt(trackRect->Center->X,trackRect->Center->Y);
          Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
        }
       
         if (ZoomOutBtn->Down)
        {
           IMoRectanglePtr extRect = Map1->ControlInterface->Extent;
           extRect->ScaleRectangle(1.5);
           Map1->ControlInterface->Extent = extRect;
           Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
        }
   
         if (PanBtn->Down)
         {
           Map1->ControlInterface->Pan();
           Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
         }
       
         if (FullExtentBtn->Down)
         {
         IMoRectanglePtr fullExt = Map1->FullExtent;
         Map1->ControlInterface->Extent = fullExt;
         Map2->ControlInterface->Extent=Map2->ControlInterface->Extent;
         }
        


3.点选择

         IMoPointPtr pt,shape;
         IMoMapLayerPtr   layer;        

         layer=(IDispatch*)CreateOleObject("MapObjects2.MapLayer");
         layer=Map1->Layers->Item(TVariant(0));

         pt=Map1->ToMapPoint(X,Y);  //mousedown获取的坐标     
         g_Select=layer->SearchByDistance(pt,0.0015,WideString(""));

        或     

         n_Select=layer->SearchExpression(WideString("ID ='"+value+"' AND NameID

         ='"+Namevalue+"'"));

 

 

4.对图层rend。

   就是对图层上得symbol赋予自定义的颜色,字符等。

   IMoValueMapRendererPtr rd;

   IMoLabelRendererPtr    label;

   IMoGroupRendererPtr    layer_grouprend;

   IMoStringsPtr strings = (IDispatch*)CreateOleObject("MapObjects2.Strings");
         rst->MoveFirst();

         //设置rend层,注意如果keyword值相同,将只取其中一个

          while (! bool(rst->EOF_))
        {
       
        String strValue=rst->Fields->Item(TVariant(keyword))->ValueAsString;
        strings->Add(WideString(strValue));
        rst->MoveNext();
        j++;
          }


         rd->Field = WideString(keyword);//rend层和layer层对应的唯一属性
         rd->SymbolType=moPointSymb

9 7 3 1 2 3 4 8 :

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    CRS-0184: Cannot communicate with the CRS daemon
    你应当如何学习C++
    C++库大汇
    C++ 运算符重载 转换函数
    C++中使用接口
    点在多边行内得判断(C++)
    C++编辑属性关键代码

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号