⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 (转)牛人总结的mo+vc小结_flora的杂货店.htm

📁 MO+VC的学习文档资料
💻 HTM
📖 第 1 页 / 共 4 页
字号:
      sym;<BR>if (!sym.CreateDispatch("MapObjects2.Symbol")) 
      <BR>return;<BR>sym.SetColor(moPurple);<BR>sym.SetSymbolType(moLineSymbol); 
      //常量定义请见MapObjects2.h<BR>sym.SetStyle(moSolidLine);<BR>sym.SetSize(2);<BR>m_map.DrawShape(line, 
      sym);<BR>m_map.Refresh();<BR>}<BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>2.生成一个线对象的示例 
      <BR>演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>{<BR>CMoLine 
      line;<BR>line.CreateDispatch("MapObjects2.Line");<BR><BR>CMoPoints 
      pts;<BR>pts.CreateDispatch("MapObjects2.Points");<BR><BR>CMoPoint 
      pt;<BR>pt.CreateDispatch("MapObjects2.Point");<BR><BR>pt.SetX(1);<BR>pt.SetY(1);<BR>pts.Add(pt);<BR>pt.SetX(100);<BR>pt.SetY(100);<BR>pts.Add(pt);<BR><BR>CMoParts 
      parts(line.GetParts());<BR>parts.Add(pts);<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>3.为何我画了对象却没有显示 
      <BR><BR>1,检查图层是否layer.SetVisible(TRUE);<BR>2,检查map的extent是否包含了你所需要显示的对象。关于这个可以参考6中的代码,它通过遍历所有图层,获得了一个最合适的Extent<BR>3,检查该对象是否被其他对象覆盖。 
      <BR>4,检查该对象是的颜色是否与背景相同。 <BR><BR><BR><BR><BR><BR>4.已经获得part,如何组装成Line: 
      <BR>演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>int 
      DEF_P0017(CMoLine* pline)<BR>{<BR>CMoParts parts = pline-&gt;GetParts(); 
      //get parts<BR>for(short i=0; i&lt; parts.GetCount(); i++){ <BR>CMoPoints 
      P1( parts.Item(COleVariant(i))); //parts--&gt;points<BR>CMoLine Line; 
      //create line object<BR>if 
      (!Line.CreateDispatch(TEXT("MapObjects2.Line"))){<BR>return 1;<BR>}//end 
      if<BR>CMoParts ps(Line.GetParts()); //get line's parts<BR>ps.Add(P1); 
      //add pline --&gt; parts --&gt;points--&gt;Line<BR>}//end for<BR>return 
      0;<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>5.获得线的起点(从某种意义上将,也是终点)的方法。 
      <BR>Here's some sample code that assumes that there is at least two points 
      in the line:<BR>演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>/*** 
      START CODE ***/ <BR>//track the line <BR>CMoLine myLine(TrackLine()); 
      <BR>//get the MoParts of the line. <BR>CMoParts 
      myParts(myLine.GetParts()); <BR>//get the vertice points. <BR>CMoPoints 
      myPoints(myParts.Item(COleVariant((short)0))); <BR>//get the number of 
      vertices. <BR>long num = myPoints.GetCount(); <BR>if (num &gt; 1) <BR>{ 
      <BR>//get the first point. <BR>CMoPoint ptFirst( 
      myPoints.Item(COleVariant((short)0))); <BR>//get the last point of the 
      line. <BR>CMoPoint ptLast(myPoints.Item(COleVariant((short)num-1))); <BR>} 
      <BR>/*** END CODE **/ 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>6.对所有图层依次执行某个操作的示例代码: 
      <BR>使用循环可以遍历各个图层,但是你必须匹配图层的title后放可知道该图层是你所需要的图层<BR>此代码还演示了如何使用技巧获得所有图层的最适合的Extent。 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>double 
      dLimit_Bottom,dLimit_top,dLimit_left,dLimit_right;<BR>dLimit_Bottom = 
      dLimit_top = dLimit_left = dLimit_right =0;<BR>CMoLayers 
      layers(m_map.GetLayers());<BR>for(short i=0; i &lt; layers.GetCount(); 
      i++) //对所有图层<BR>{<BR>CMoMapLayer layer(layers.Item(COleVariant(i) 
      ));<BR>if (! layer.GetLayerType()==moMapLayer ){<BR>MessageBox( 
      _T("图层必须是Shape图层,你设置的不是。对不起,无法载入。"), _T("提示"), 
      MB_OK|MB_ICONWARNING);<BR>return ;<BR>}<BR>//设置Extent<BR>CMoRectangle 
      RectExtent (layer.GetExtent());<BR>if (RectExtent.GetBottom() &lt; 
      dLimit_Bottom) dLimit_Bottom =RectExtent.GetBottom();<BR>if 
      (RectExtent.GetTop() &gt; dLimit_top) dLimit_top 
      =RectExtent.GetTop();<BR>if (RectExtent.GetLeft() &lt; dLimit_left) 
      dLimit_left =RectExtent.GetLeft();<BR>if (RectExtent.GetRight() &gt; 
      dLimit_right) dLimit_right 
      =RectExtent.GetRight();<BR><BR>//如果是指定的图层,则<BR>if ( "YourShapeTitle" == 
      layer.GetName()){<BR>//do something like follow code: <BR>if 
      (moShapeTypeLine!= layer.GetShapeType()){<BR>MessageBox( _T("图层必须是线图层"), 
      _T("提示"), MB_OK|MB_ICONWARNING);<BR>return ;<BR>}//end if 
      (moShapeTypeLine!= layer.GetShapeType())<BR>}// end if ( "YourShapeTitle" 
      == layer.GetName())<BR>}// end for(short i=0; i &lt; layers.GetCount(); 
      i++)<BR>extent.SetBottom (dLimit_Bottom 
      );<BR>extent.SetTop(dLimit_top);<BR>extent.SetLeft(dLimit_left);<BR>extent.SetRight(dLimit_right);<BR>extent.ScaleRectangle(1.2);<BR>m_map.SetFullExtent 
      (extent);<BR>m_map.SetExtent(extent);<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>7.利用CMoValueMapRenderer为同一图层N个多边形着色: 
      <BR>演示代码如下: (代码9中转载了另外一种方法,可以指定颜色而不是随机颜色。请见9改变图层颜色) 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>short 
      i = 0;<BR>CMoMapLayer layer(layers.Item(COleVariant(i) 
      ));<BR>//将每个polygon取出,并为每个多边形着色。<BR>CMoRecordset recs(layer.GetRecords()); 
      // used to hold all polygons<BR><BR>CMoStrings 
      strings;<BR>VERIFY(strings.CreateDispatch(TEXT("MapObjects2.Strings")));<BR>CMoFields 
      fields(recs.GetFields());<BR><BR>while (!recs.GetEof())<BR>{<BR>CMoField 
      Density(fields.Item(COleVariant("Density"))); //这里Density 
      是一个属性,你可以替代成你自己定义的属性<BR>strings.Add(Density.GetValueAsString());<BR>recs.MoveNext();<BR>} 
      //end while (!recs.GetEof())<BR><BR>//如果多于1个polygon,则为每个多边形着色<BR>if( 
      recs.GetCount() &gt; 1){<BR>//<BR>// Set up value map 
      renderer<BR>//<BR>CMoValueMapRenderer 
      vmRenderer;<BR>VERIFY(vmRenderer.CreateDispatch(TEXT("MapObjects2.ValueMapRenderer")));<BR>vmRenderer.SetField(TEXT("Density"));<BR>vmRenderer.SetValueCount(strings.GetCount());<BR>for 
      (short i = 0; i &lt; strings.GetCount(); i++)<BR>vmRenderer.SetValue(i, 
      strings.Item(COleVariant(i)));<BR>layer.SetRenderer(vmRenderer);<BR>//着色完毕<BR>} 
      //end if( recs.GetCount() &gt; 
      1)<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>8.制作一个点图层(转载): 
      <BR>(来自CSDN)有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。<BR>假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray, 
      m_LatArray,均为CArray&lt;float,float&gt;型。然后我们在CMyView中增加一些成员变量:<BR><BR><BR>CmoDataConnectionpMoCon;<BR>CMoTableDescdesc;<BR>CMoMapLayerlayer; 
      <BR>CMoPointm_point;<BR><BR>好了,是为创建新图层增加一个函数的时候了,在视图类中增加函数:CreateNewLayer()。 
      <BR>演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>BOOL 
      CMyView:: CreateNewLayer ()<BR>{<BR>if 
      (!pMoCon.CreateDispatch(TEXT("MapObjects2.DataConnection")))<BR>return 
      FALSE;<BR>if(!desc.CreateDispatch("MapObjects2.TableDesc"))<BR>return 
      FALSE;<BR><BR>VARIANT vt;<BR>vt.vt = VT_BOOL;<BR>vt.boolVal = 
      VARIANT_FALSE;<BR><BR>pMoCon.SetDatabase((LPCTSTR)"E:\\Demo\\经纬度层"); 
      //设置图层保存目录<BR>if(!pMoCon.Connect())<BR>return 
      FALSE;<BR><BR>//设置图层的字段个数及属性,这里设置两个,一个为Number,一个为Name。表示点的号码及名称。<BR>desc.SetFieldCount(2);<BR>desc.SetFieldType(0,moString);<BR>desc.SetFieldName(0,"Number");<BR>desc.SetFieldLength(0,10);<BR>desc.SetFieldType(1,moString);<BR>desc.SetFieldName(1, 
      "Name");<BR>desc.SetFieldLength(1, 
      10);<BR><BR>//创建新图层,设置名称、类型及字段。<BR>CmoGeoDataSet 
      geoDataset(pMoCon.AddGeoDataset(“经纬度层”, moShapeTypePoint, 
      <BR>(LPDISPATCH)desc, vt, vt);<BR><BR>if 
      (!layer.CreateDispatch(TEXT("MapObjects2.MapLayer")))<BR>return 
      FALSE;<BR><BR>//设置图层的记录集<BR>layer.SetGeoDataset(geoDataset); 
      <BR>CMoRecordset recs(layer.GetRecords());<BR>CMoFields 
      fields(recs.GetFields());<BR><BR>for(int i=0; i&lt; m_LonArray.GetSize(); 
      i++)<BR>{<BR>recs.AddNew();<BR>m_point.SetX(m_ 
      LonArray.GetAt(i));<BR>m_point.SetY(m_ 
      LatArray.GetAt(i));<BR>SetValue(fields, 
      "Shape",m_point);<BR>SetValue(fields, 
      "Number",m_Number.GetAt(i));//需定义CStringArray m_Number<BR>SetValue(fields, 
      "Name", m_Chname.GetAt(i));//需定义CStrignArray 
      m_Name<BR>recs.Update();<BR>}<BR><BR>//设置点的颜色,并加入地图。<BR>layer.GetSymbol().SetColor(moLightYellow);<BR>CMoLayers 
      layers(m_map.GetLayers());<BR>layers.Add(layer); <BR>return 
      TRUE;<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR>好了,调用一下试试效果吧。 
      <BR><BR><BR><BR>9.改变图层颜色(转载) <BR>另外一个简单的随机颜色填充在示例7,请参考7。原作者:张松伟 
      zswking@163.com<BR>如果你的地国正在显示一个“中国地图”的图层,而图层中每个省的颜色都是一样的,你是不是想把它做成真实地图一样的效果,给各个省填上颜色呢?好,让我们开始吧。<BR>注意,一定要确保你的“中图地图”图层数据中有标识各个省的数据和字段(可以在ArcMap中看到),因为只有能区别出各个区域才能对区域填色,现在我们假设图层名称为China, 
      标识各个省的字段为NAME。好了,在你程序中加入改变颜色的函数吧。 <BR>演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>void 
      CMapCortrol::ChangeChinaColor()<BR>{<BR>CMoRecordset recs; 
      //图层的记录集<BR>CMoStrings strs; 
      //MO的字符串类<BR>strs.CreateDispatch("MapObjects2.Strings");<BR><BR>//得到图层数据中NAME字段的第条记录,保存在strs中。<BR>CMoMapLayer 
      lay = m_map.GetLayers().Item(COleVariant("China"));<BR>recs = 
      lay.GetRecords();<BR>while(!recs.GetEof())<BR>{ <BR>CMoFields mfs = 
      recs.GetFields();<BR>CMoField mf = 
      mfs.Item(COleVariant("NAME"));<BR>CString s = 
      mf.Get_Value().bstrVal;<BR>strs.Add(s);<BR><BR>recs.MoveNext();<BR>}<BR><BR>//改变区域颜色<BR>CMoValueMapRenderer 
      vmRend;<BR>vmRend.CreateDispatch("MapObjects2.ValueMapRenderer");<BR>vmRend.SetValueCount(strs.GetCount());<BR>vmRend.SetField("NAME");<BR><BR>for(int 
      i=0; i&lt; strs.GetCount(); i++)<BR>{<BR>//将保存的省名附给vmRend<BR>VARIANT 
      V;<BR>V.vt = VT_I2;<BR>V.iVal = i;<BR>vmRend.SetValue(i, 
      strs.Item(V));<BR><BR>//取出省名并进行判断<BR>if(vmRend.GetValue(i) == "北京市" || 
      vmRend.GetValue(i) == "上海市" ||<BR>vmRend.GetValue(i) == "江西省" || 
      vmRend.GetValue(i) == 
      "四川省")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(239,252,230));<BR>}<BR>else 
      if(vmRend.GetValue(i) == "安徽省" || vmRend.GetValue(i) == "黑龙江" 
      ||<BR>vmRend.GetValue(i) == "辽宁省" || vmRend.GetValue(i) == "广西壮族自治区" 
      ||<BR>vmRend.GetValue(i) == "台湾省" || vmRend.GetValue(i) == "甘肃省" || 
      <BR>vmRend.GetValue(i) == "天津市" || vmRend.GetValue(i) == 
      "山西省")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(241,232,252));<BR>}<BR>else 
      if(vmRend.GetValue(i) == "山东省" || vmRend.GetValue(i) == "陕西省" 
      ||<BR>vmRend.GetValue(i) == "湖南省" || vmRend.GetValue(i) == "海南省" 
      ||<BR>vmRend.GetValue(i) == "澳门" || vmRend.GetValue(i) == 
      "香港")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(252,237,248));<BR>}<BR>else 
      if(vmRend.GetValue(i) == "河南省" || vmRend.GetValue(i) == "内蒙古自治区" 
      ||<BR>vmRend.GetValue(i) == "福建省" || vmRend.GetValue(i) == "贵州省" 
      ||<BR>vmRend.GetValue(i) == 
      "青海省")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(252,251,235));<BR>}<BR>else 
      if(vmRend.GetValue(i) == "江苏省" || vmRend.GetValue(i) == 
      "西藏自治区")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(252,230,246));<BR>}<BR>else 
      if(vmRend.GetValue(i) == "吉林省" || vmRend.GetValue(i) == "河北省" 
      ||<BR>vmRend.GetValue(i) == "浙江省" || vmRend.GetValue(i) == "湖北省" 
      ||<BR>vmRend.GetValue(i) == "广东省" || vmRend.GetValue(i) == "新疆维吾尔族自治区" || 
      vmRend.GetValue(i) == "云南省" || vmRend.GetValue(i) == 
      "宁夏回族自治区")<BR>{<BR>vmRend.GetSymbol(i).SetColor(RGB(245,252,252));<BR>}<BR>//设置省界的颜色<BR>vmRend.GetSymbol(i).SetOutlineColor(RGB(185,185,185));<BR>}<BR>lay.SetRenderer(vmRend);<BR>m_map.Refresh();<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>10.Fields不能通过索引号来获取Field,怎么办? 
      <BR>mo中Fields不能通过索引号来获取Field,只提供了通过字段名称来获取字段的方法,代码如下 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>short 
      i = 0;<BR>CMoMapLayer layer(layers.Item(COleVariant(i) ));<BR>CMoRecordset 
      recs(layer.GetRecords()); // used to hold all shapes<BR>CMoFields 
      Fields(recs.GetFields());<BR>while 
      (!recs.GetEof())<BR>{<BR>CMoFieldShapeField(Fields.Item(COleVariant(TEXT("Shape")))); 
      //指定字段名<BR>//加入你的代码<BR>recs.MoveNext();<BR>} //end while 
      (!recs.GetEof())<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>有两种方法可以解决此问题: 
      一是通过TableDesc来获取Recordset的结构,但是只能获取到属性字段,空间字段无法获取(应该是Shape/FeatureID两个字段获取不到,其他都可以), 
      详见CMoTableDesc类的GetFieldName()方法。代码如下 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>CMoDataConnection 
      conn, CMoTableDesc tableDesc<BR>CMoGeoDataset 
      geoDataset(conn.AddGeoDataset(GetFileTitle(m_path), moLine, tableDesc, va 
      ,va));<BR>ASSERT(LPDISPATCH(geoDataset));<BR>CString strFieldName;<BR>for 
      (i=0;i&lt; tableDesc.GetFieldCount; i++)<BR>strFieldName = 
      tableDesc.GetFieldName;<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR>另外也可以用CMoIterator这个类。一般的,对于collection的对象都可以用CMoIterator这个类。示例代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>short 
      j = 0;<BR>CMoMapLayer layer(layers.Item(COleVariant(j) ));<BR>CMoRecordset 
      recs(layer.GetRecords()); // used to hold all shapes<BR>CMoFields 
      fields(recs.GetFields());<BR>int iCount=fields.GetCount(); <BR>CMoIterator 
      moIterator(fields);<BR>CMoField field;<BR>moIterator.Reset();<BR>for(int 
      i=0;i&lt; 
      iCount;i++)<BR>{<BR>moIterator.Next(field);<BR>TRACE("name=%s\n",field.GetName());<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>11.判断图层类型是点、线还是面图层。 
      <BR>对一个layer对象使用GetShapeType而不是GetLayerType函数。GetLayerType函数用于判断一个图层是矢量还是栅格的。演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>CMoLayers 
      layers(m_map.GetLayers());<BR>if (! layer.GetLayerType()==moMapLayer ){ 
      //常量moMapLayer表示矢量图,moImageLayer表示Image图<BR>MessageBox( 
      _T("图层必须是Shape图层,你设置的不是。对不起,无法载入。"), _T("提示"), 
      MB_OK|MB_ICONWARNING);<BR>return FALSE;<BR>}<BR>for(short i=0;i&lt; 
      layers.GetCount();i++) //对所有图层<BR>{<BR>CMoMapLayer 
      layer(layers.Item(COleVariant(i) ));<BR>if (moShapeTypeLine != 
      layer.GetShapeType())//如果不是线,常量moShapeTypeLine等定义见MapObject2.h<BR>{<BR>//add 
      your code here!<BR>}//end if (moShapeTypeLine != 
      layer.GetShapeType())<BR>}//end for(short i=0;i&lt; 
      layers.GetCount();i++)<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>12.在指定的目录下保存全部图层文件。 
      <BR>在szPath指定的目录下保存全部图层。演示代码如下: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>void 
      CMoCov2ShpView::SaveAsShp(CString szPath)<BR>{<BR>CMoRecordset 
      rst;<BR>CMoGeoDataset dst;<BR>CMoMapLayer ly; 
      <BR>try<BR>{<BR>rst.CreateDispatch(_T("MapObject2.Recordset"));<BR>ly.CreateDispatch(_T("MapObject2.MapLayer"));<BR>}<BR>catch(COleException 
      *ep)<BR>{<BR>ep-&gt;ReportError();<BR>return;<BR>}<BR><BR>CString 
      szFileName;<BR>CMoLayers lys(m_objMap.GetLayers());<BR>int 
      ilyCounts;<BR>ilyCounts = lys.GetCount(); <BR><BR>for(int i = 0;i &lt; 
      ilyCounts;i ++)<BR>{<BR>try<BR>{<BR><BR>ly = 
      lys.Item(COleVariant((short)i));<BR>szFileName = 
      ly.GetName();<BR>if(szFileName.IsEmpty() != 
      NULL)<BR>{<BR>szFileName.Format("AutoFileName%d",i);<BR>}<BR>szFileName = 
      szPath + "\\" + szFileName + ".shp";<BR>rst = ly.GetRecords(); 
      <BR>rst.Export(szFileName,ly.GetCoordinateSystem());<BR>}<BR>catch(COleException 
      *ep)<BR>{<BR>ep-&gt;ReportError();<BR>}<BR>}//end for(int i = 0;i &lt; 
      ilyCounts;i 
      ++)<BR>}<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>13.如何合并两个图层? 
      <BR>下面是图层合并的演示代码: 
      <BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>void 
      CMoAddShapeView::MergeLayers()<BR>{<BR>CMoTableDesc 
      oTDesc;<BR>CMoGeoDataset oDataset;<BR>CMoDataConnection 
      oConnection;<BR>CMoRecordset oRecset;<BR>CMoMapLayer 
      oLayer,oTempLayer;<BR>CMoRecordset oTempRecs;<BR>CMoField 
      oField;<BR>CMoFields oFields;<BR>CMoFields oTempFields;<BR>CString 
      szMergeFile;<BR>long lshpType;<BR>CString szPath;<BR>char 
      chPath[MAX_PATH];<BR>int ilen = 0;<BR>int fCounts;<BR>CString 
      szFName;<BR><BR>CMoLayers oLayers(m_objMap.GetLayers());<BR>if( 
      oLayers.GetCount() &lt; 2) //小于2个图层无法合并<BR>return;<BR>oTempLayer = 
      oLayers.Item(COleVariant((short)(oLayers.GetCount() -1)));<BR>oRecset = 
      oTempLayer.GetRecords();<BR>lshpType = 
      oTempLayer.GetShapeType();<BR>if(m_strMergeFile.IsEmpty() != 
      NULL)<BR>{<BR>szMergeFile = 
      oTempLayer.GetName();<BR>}<BR>else<BR>{<BR>szMergeFile = 
      m_strMergeFile;<BR>}<BR>if(!oConnection.CreateDispatch(TEXT("MapObjects2.DataConnection")))<BR>return;<BR>if(!oLayer.CreateDispatch(TEXT("MapObjects2.MapLayer")))<BR>return;<BR><BR>GetCurrentDirectory(MAX_PATH,chPath);<BR>ilen 
      = strlen(chPath);<BR>chPath[ilen] = '\0';<BR>szPath = 
      chPath;//[ilen];<BR>oConnection.SetDatabase(szPath);<BR><BR>if(oConnection.Connect())<BR>{<BR>VARIANT 
      va;<BR>VariantInit(&amp;va);<BR>va.vt =VT_BOOL;<BR>va.bVal = 
      false;<BR>oTDesc = oRecset.GetTableDesc();<BR>//oDataset = 
      oConnection.AddGeoDataset("Merged",lshpType,oTDesc,va,va);<BR>if(szMergeFile.IsEmpty() 
      != NULL)<BR>{<BR>CTime tm(CTime::GetCurrentTime());<BR>szMergeFile = 
      "Merged" + tm.Format("%H%M%S");<BR>}<BR>oDataset = 
      oConnection.AddGeoDataset(szMergeFile,lshpType,oTDesc,va,va);<BR>if(oDataset 
      == NULL)<BR>return;<BR>oLayer.SetGeoDataset(oDataset);<BR>oTempRecs = 
      oLayer.GetRecords();<BR>oTempRecs.SetAutoFlush(FALSE);<BR>for(int i= 
      oLayers.GetCount() -1;i &gt;= 0;i --)<BR>{<BR>oTempLayer = 
      oLayers.Item(COleVariant((short)i));<BR>oRecset = 
      oTempLayer.GetRecords();<BR>if(lshpType != 
      oTempLayer.GetShapeType())<BR>continue;<BR>if(!TableDescMatch(oTDesc,oRecset.GetTableDesc()))<BR>continue;<BR>oRecset.MoveFirst();<BR>while(!oRecset.GetEof())<BR>{<BR>oTempRecs.AddNew();<BR>fCounts 
      = oTDesc.GetFieldCount(); <BR>VARIANT v; <BR>for(short j = 0;j &lt; 
      fCounts;j++)<BR>{<BR>szFName = 
      oTDesc.GetFieldName(j);<BR>OutputDebugString(szFName + 
      "\n\r");<BR>if(szFName.CompareNoCase("Shape") == 
      NULL)<BR>{<BR>VariantInit(&amp;v); <BR>v = 
      oRecset.GetFields().Item(COleVariant(TEXT(szFName))).Getvalue(); 
      <BR><BR>LPDISPATCH value; <BR>v.vt = VT_DISPATCH; <BR>value = v.pdispVal; 
      <BR>Setvalue(oTempRecs.GetFields(),szFName,value);<BR>}<BR>else<BR>{<BR>oTempRecs.GetFields().Item(COleVariant(TEXT(szFName))).Setvalue(oRecset.GetFields().Item(COleVariant(TEXT(szFName))).Getvalue());<BR>}//end 
      if(szFName.CompareNoCase("Shape") == NULL)<BR>}//end for(short j = 0;j 
      &lt; fCounts;j++)<BR><BR>VariantInit(&amp;v); <BR>v = 
      oRecset.GetFields().Item(COleVariant(TEXT("shape"))).Getvalue(); 
      <BR><BR>LPDISPATCH value; <BR>v.vt = VT_DISPATCH; <BR>value = v.pdispVal; 
      <BR>Setvalue(oTempRecs.GetFields(),"Shape",value);<BR>Setvalue(oTempRecs.GetFields(),"FeatureID",oRecset.GetFields().Item(COleVariant(TEXT("FeatureID"))).Getvalue());<BR>oTempRecs.Update();<BR>oRecset.MoveNext();<BR>}//while(!oRecset.GetEof())<BR>} 
      //end for(int i= oLayers.GetCount() -1;i &gt;= 0;i 
      --)<BR>oTempRecs.SetAutoFlush(TRUE);<BR>}// end 
      if(oConnection.Connect())<BR>oLayers.Clear();<BR>oLayers.Add(oLayer);<BR>m_objMap.Refresh();<BR>}<BR></DIV></TD></TR></TBODY></TABLE><BR>
<DIV class=opt><A title=查看该分类中所有文章 
href="http://hi.baidu.com/flora&micro;&Auml;&Ocirc;&Oacute;&raquo;&otilde;&micro;ê/blog/category/&Euml;&Ntilde;&sup1;&Icirc;×&Ecirc;&Aacute;&Iuml;">类别:搜刮资料</A> | <A 
title=将此文章添加到百度搜藏 onclick="return addToFavor();" 
href="http://cang.baidu.com/do/add" target=_blank>添加到搜藏</A> | 浏览(<SPAN 
id=result></SPAN>) | <A 
href="http://hi.baidu.com/flora&micro;&Auml;&Ocirc;&Oacute;&raquo;&otilde;&micro;ê/blog/item/a5b9607eb33d973f0dd7da14.html#send">评论</A>&nbsp;(0)
<SCRIPT language=javascript>
/*<![CDATA[*/
var pre = [true,'关于MapObject控件', '关于MapObject控件','/flora%B5%C4%D4%D3%BB%F5%B5%EA/blog/item/7aa2be06243ee17c0308813a.html'];
var post = [true,'痛','痛', '/flora%B5%C4%D4%D3%BB%F5%B5%EA/blog/item/1387042a4c2ac79c033bf6b5.html'];
if(pre[0] || post[0]){
	document.write('<div style="height:5px;line-height:5px;">&nbsp;</div><div id="in_nav">');
	if(pre[0]){
		document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' +  pre[2] + '</a>&nbsp;&nbsp;&nbsp;&nbsp;');
	}
	if(post[0]){
		document.write('下一篇:<a href="' + post[3] + '" title="' + post[1] + '">' +  post[2] + '</a>');
	}
	document.write('</div>');
}
/*]]>*/
</SCRIPT>
 </DIV>
<DIV class=line></DIV>
<STYLE type=text/css>#in_related_doc A {
	TEXT-DECORATION: none
}
</STYLE>

<DIV id=in_related_tmp></DIV>
<SCRIPT language=javascript type=text/javascript>
/*<![CDATA[*/
function HI_MOD_IN_RELATED_DOC_CALLBACK(arg){
    if(arg.length <= 1) return false;
    var hasMore = arg[0];
    var D=function(A,B){A[A.length]=B;}
    if(arg.length % 2 == 0) D(arg, ["","","",""]);

    var html = ['<div id="in_related_doc"><div class="tit">相关文章:</div>'];
    D(html, '<table cellpadding="0" cellspacing="3" border="0">');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -