📄 (转)牛人总结的mo+vc小结_flora的杂货店.htm
字号:
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->GetParts();
//get parts<BR>for(short i=0; i< parts.GetCount(); i++){ <BR>CMoPoints
P1( parts.Item(COleVariant(i))); //parts-->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 --> parts -->points-->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 > 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 < 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() <
dLimit_Bottom) dLimit_Bottom =RectExtent.GetBottom();<BR>if
(RectExtent.GetTop() > dLimit_top) dLimit_top
=RectExtent.GetTop();<BR>if (RectExtent.GetLeft() < dLimit_left)
dLimit_left =RectExtent.GetLeft();<BR>if (RectExtent.GetRight() >
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 < 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() > 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 < strings.GetCount(); i++)<BR>vmRenderer.SetValue(i,
strings.Item(COleVariant(i)));<BR>layer.SetRenderer(vmRenderer);<BR>//着色完毕<BR>}
//end if( recs.GetCount() >
1)<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR><BR><BR><BR>8.制作一个点图层(转载):
<BR>(来自CSDN)有些时候将一些固定的数据制作成图层,可以提高程序的速度,而且使用方便。下面我就将对图层的制作方法进行一下简单的说明。<BR>假设我们要将一些经纬度坐标用点的方式画在地图上,那么我们首先要有保存经纬度坐标的数组:m_LonArray,
m_LatArray,均为CArray<float,float>型。然后我们在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< 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< 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< 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<
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<
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<
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->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 <
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->ReportError();<BR>}<BR>}//end for(int i = 0;i <
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() < 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(&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 >= 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 <
fCounts;j++)<BR>{<BR>szFName =
oTDesc.GetFieldName(j);<BR>OutputDebugString(szFName +
"\n\r");<BR>if(szFName.CompareNoCase("Shape") ==
NULL)<BR>{<BR>VariantInit(&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
< fCounts;j++)<BR><BR>VariantInit(&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 >= 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µÄÔÓ»õµê/blog/category/ËѹÎ×ÊÁÏ">类别:搜刮资料</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µÄÔÓ»õµê/blog/item/a5b9607eb33d973f0dd7da14.html#send">评论</A> (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;"> </div><div id="in_nav">');
if(pre[0]){
document.write('上一篇:<a href="' + pre[3] + '" title="' + pre[1] + '">' + pre[2] + '</a> ');
}
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 + -