vivin
路人甲
路人甲
  • 注册日期2005-07-08
  • 发帖数21
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1529回复:3

[求助]如何把SHP图层里的属性显示出来?

楼主#
更多 发布于:2005-10-09 20:04
用vc+mo做的,有个功能想实现,就是,当我点击图层上的点,会把这个点的属性显示出来,有什么办法吗?请教!!!
喜欢0 评分0
majun
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数10
  • QQ
  • 铜币162枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
majun
路人甲
路人甲
  • 注册日期2004-09-22
  • 发帖数10
  • QQ
  • 铜币162枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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>
举报 回复(0) 喜欢(0)     评分
vivin
路人甲
路人甲
  • 注册日期2005-07-08
  • 发帖数21
  • QQ
  • 铜币219枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于: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>
举报 回复(0) 喜欢(0)     评分
游客

返回顶部