阅读:1529回复:3
[求助]如何把SHP图层里的属性显示出来?
用vc+mo做的,有个功能想实现,就是,当我点击图层上的点,会把这个点的属性显示出来,有什么办法吗?请教!!!
|
|
1楼#
发布于:2005-10-10 21:39
<P>CMoPoint pt(m_map1.ToMapPoint((float)X,(float)Y));<BR> CMoRectangle select_Rect;<BR> if(!select_Rect.CreateDispatch("MapObjects2.Rectangle"))<BR> return;<BR> double x=pt.GetX();<BR> double y=pt.GetY();<BR> CMoRectangle rect_Extent(m_map1.GetExtent());<BR> double X_Scale;<BR> double Y_Scale;<BR> X_Scale=rect_Extent.GetHeight()/m_map1.GetFullExtent().GetHeight();<BR> Y_Scale=rect_Extent.GetWidth()/m_map1.GetFullExtent().GetWidth();<BR> double m_Scale=X_Scale;<BR> if(X_Scale>Y_Scale)<BR> m_Scale=Y_Scale;<BR> select_Rect.SetBottom(y-50*m_Scale);<BR> select_Rect.SetTop(y+50*m_Scale);<BR> select_Rect.SetLeft(x-50*m_Scale);<BR> select_Rect.SetRight(x+50*m_Scale);<BR> <BR> CMoRecordset m_SelectedRecSet;<BR> CMoLayers m_Layers=m_map1.GetLayers();<BR> VARIANT index;<BR> VariantInit(;index);<BR> index.vt=VT_I4;<BR> index.lVal=2;<BR> CMoMapLayer selectedMapLayer(m_Layers.Item(index));<BR> m_SelectedRecSet=selectedMapLayer.SearchShape(select_Rect,6,"");<BR> CMoTableDesc tableDesc(m_SelectedRecSet.GetTableDesc());<BR> CMoFields ShapeFields(m_SelectedRecSet.GetFields());<BR> CMoField ShapeField;<BR> CString resultStr;<BR> for(int i=0;i<tableDesc.GetFieldCount();i++)<BR> {<BR> CString name=tableDesc.GetFieldName(i);<BR> ShapeField=ShapeFields.Item(COleVariant(name));<BR> CString value=ShapeField.GetValueAsString();<BR> resultStr=resultStr+name+":"+value+"\n";<BR> }<BR> MessageBox(resultStr);</P>
<P>就是这个代码,请教!有什么地方错了</P> |
|
2楼#
发布于:2005-10-12 15:36
<P> VARIANT index;<BR> VariantInit(;index);<BR> index.vt=VT_I4;<BR> index.lVal=2;<BR> CMoMapLayer selectedMapLayer(m_Layers.Item(index));</P>
<P>把这段代码换成下面的看看</P> <P> CMoMapLayer selectedMapLayer(m_Layers.Item(CComVariant(2)));</P> |
|
3楼#
发布于:2005-10-12 15:56
<P>帮你修改了一下代码,假设为0层</P>
<P>CMoPoint DownPoint(m_map.ToMapPoint(static_cast<float>(X),static_cast<float>(Y)));<BR>CMoMapLayer Layer(m_map.GetLayers().Item(CComVariant(0)));<BR>CMoRecordset recs;<BR>recs = Layer.SearchByDistance(DownPoint,m_map.ToMapDistance(10),"");<BR>CString strResult("");<BR>while(!recs.GetEof())<BR>{<BR> CMoTableDesc Table(recs.GetTableDesc());<BR> for(int i = 0; i < Table.GetFieldCount();++i)<BR> {<BR> strResult += Table.GetFieldName(i) + ":";<BR> strResult += recs.GetFields().Item(CComVariant(Table.GetFieldName(i))).GetValueAsString();<BR> strResult += "\t\n";<BR> }<BR> recs.MoveNext();<BR>}<BR>MessageBox(strResult);</P> |
|