MapXViewView.cpp
上传用户:gulin912
上传日期:2022-08-10
资源大小:330k
文件大小:24k
源码类别:

GIS编程

开发平台:

Visual C++

  1. // MapXViewView.cpp : implementation of the CMapXViewView class
  2. //
  3. #include "stdafx.h"
  4. #include "MapXView.h"
  5. #include "MapXViewDoc.h"
  6. #include "MapXViewView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CMapXViewView
  14. IMPLEMENT_DYNCREATE(CMapXViewView, CFormView)
  15. BEGIN_MESSAGE_MAP(CMapXViewView, CFormView)
  16. //{{AFX_MSG_MAP(CMapXViewView)
  17. ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
  18. ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
  19. ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
  20. ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
  21. ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
  22. ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
  23. ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
  24. ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
  25. ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
  26. ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
  27. ON_BN_CLICKED(IDC_BUTTON11, OnButton11)
  28. ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
  29. ON_BN_CLICKED(IDC_BUTTON12, OnButton12)
  30. ON_BN_CLICKED(IDC_BUTTON13, OnButton13)
  31. ON_BN_CLICKED(IDC_BUTTON14, OnButton14)
  32. ON_BN_CLICKED(IDC_BUTTON15, OnButton15)
  33. ON_BN_CLICKED(IDC_BUTTON16, OnButton16)
  34. ON_BN_CLICKED(IDC_BUTTON17, OnButton17)
  35. ON_BN_CLICKED(IDC_BUTTON18, OnButton18)
  36. ON_BN_CLICKED(IDC_BUTTON19, OnButton19)
  37. ON_BN_CLICKED(IDC_BUTTON20, OnButton20)
  38. ON_BN_CLICKED(IDC_BUTTON21, OnButton21)
  39. ON_WM_TIMER()
  40. ON_BN_CLICKED(IDC_BUTTON22, OnButton22)
  41. //}}AFX_MSG_MAP
  42. // Standard printing commands
  43. ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  44. ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  45. ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  46. END_MESSAGE_MAP()
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CMapXViewView construction/destruction
  49. CMapXViewView::CMapXViewView()
  50. : CFormView(CMapXViewView::IDD)
  51. {
  52. //{{AFX_DATA_INIT(CMapXViewView)
  53. m_XY = _T("");
  54. m_strQuery = _T("");
  55. m_PtLayer = NULL;
  56. m_LineLayer = NULL;
  57. m_PolyLayer = NULL;
  58. m_eaglefeature=NULL;
  59. m_bHasMap = FALSE;
  60. bEvent = FALSE;
  61. //}}AFX_DATA_INIT
  62. // TODO: add construction code here
  63. }
  64. CMapXViewView::~CMapXViewView()
  65. {
  66. }
  67. void CMapXViewView::DoDataExchange(CDataExchange* pDX)
  68. {
  69. CFormView::DoDataExchange(pDX);
  70. //{{AFX_DATA_MAP(CMapXViewView)
  71. DDX_Control(pDX, IDC_LIST1, m_ListFs);
  72. DDX_Control(pDX, IDC_COMBO1, m_Layers);
  73. DDX_Control(pDX, IDC_MAP1, m_Map);
  74. DDX_Text(pDX, IDC_EDIT1, m_XY);
  75. DDX_Text(pDX, IDC_EDIT2, m_strQuery);
  76. DDX_Control(pDX, IDC_MAP2, m_EyeMap);
  77. //}}AFX_DATA_MAP
  78. }
  79. BOOL CMapXViewView::PreCreateWindow(CREATESTRUCT& cs)
  80. {
  81. // TODO: Modify the Window class or styles here by modifying
  82. //  the CREATESTRUCT cs
  83. return CFormView::PreCreateWindow(cs);
  84. }
  85. void CMapXViewView::OnInitialUpdate()
  86. {
  87. CFormView::OnInitialUpdate();
  88. GetParentFrame()->RecalcLayout();
  89. ResizeParentToFit();
  90. }
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CMapXViewView printing
  93. BOOL CMapXViewView::OnPreparePrinting(CPrintInfo* pInfo)
  94. {
  95. // default preparation
  96. return DoPreparePrinting(pInfo);
  97. }
  98. void CMapXViewView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  99. {
  100. // TODO: add extra initialization before printing
  101. }
  102. void CMapXViewView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  103. {
  104. // TODO: add cleanup after printing
  105. }
  106. void CMapXViewView::OnPrint(CDC* pDC, CPrintInfo* /*pInfo*/)
  107. {
  108. // TODO: add customized printing code here
  109. }
  110. /////////////////////////////////////////////////////////////////////////////
  111. // CMapXViewView diagnostics
  112. #ifdef _DEBUG
  113. void CMapXViewView::AssertValid() const
  114. {
  115. CFormView::AssertValid();
  116. }
  117. void CMapXViewView::Dump(CDumpContext& dc) const
  118. {
  119. CFormView::Dump(dc);
  120. }
  121. CMapXViewDoc* CMapXViewView::GetDocument() // non-debug version is inline
  122. {
  123. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMapXViewDoc)));
  124. return (CMapXViewDoc*)m_pDocument;
  125. }
  126. #endif //_DEBUG
  127. /////////////////////////////////////////////////////////////////////////////
  128. // CMapXViewView message handlers
  129. void CMapXViewView::OnButton1() 
  130. {
  131. // TODO: Add your control notification handler code here
  132. //选择一个GeoSet文件,包含多个图层自己定制的
  133. CFileDialog  dlg(TRUE,NULL);
  134. CString strGeoset;
  135. if(dlg.DoModal()==IDOK)
  136. {
  137. strGeoset = dlg.GetPathName();
  138. }
  139.     //加载Geoset的方法,为Map的方法
  140. m_Map.SetGeoSet(strGeoset);
  141. m_EyeMap.SetGeoSet(strGeoset);
  142. m_EyeMap.GetLayers().CreateLayer("Rectangle");
  143. m_bHasMap = TRUE;
  144. }
  145. void CMapXViewView::OnButton2() 
  146. {
  147. // TODO: Add your control notification handler code here
  148. //方式2:调用Layer 管理对话框
  149. CMapXLayers layers;
  150. layers = m_Map.GetLayers();
  151. layers.LayersDlg();
  152. for(int i=0;i<layers.GetCount();i++)
  153. {
  154. m_EyeMap.GetLayers().Add(layers.Item(i+1).GetFilespec(),1);
  155. }
  156. //
  157. m_EyeMap.GetLayers().CreateLayer("Rectangle");
  158. m_bHasMap = TRUE;
  159. }
  160. void CMapXViewView::OnButton3() 
  161. {
  162. // TODO: Add your control notification handler code here
  163. //方式3:添加单个图层
  164. CMapXLayers layers = m_Map.GetLayers();
  165. CFileDialog dlg(TRUE,NULL);
  166. CString str;
  167. if(dlg.DoModal()==IDOK)
  168. {
  169. str = dlg.GetPathName();
  170. }
  171. layers.Add(str,1);
  172. m_EyeMap.GetLayers().Add(str,1);
  173. m_EyeMap.GetLayers().CreateLayer("Rectangle");
  174. m_bHasMap = TRUE;
  175. }
  176. void CMapXViewView::OnButton4() 
  177. {
  178. // TODO: Add your control notification handler code here
  179. m_Map.SetCurrentTool(1003);
  180. }
  181. void CMapXViewView::OnButton5() 
  182. {
  183. // TODO: Add your control notification handler code here
  184. m_Map.SetCurrentTool(1004);
  185. }
  186. void CMapXViewView::OnButton6() 
  187. {
  188. // TODO: Add your control notification handler code here
  189. m_Map.SetCurrentTool(miPanTool);
  190. }
  191. void CMapXViewView::OnButton7() 
  192. {
  193. // TODO: Add your control notification handler code here
  194. CMapXLayers layers = m_Map.GetLayers();
  195. CMapXRectangle rect = layers.GetBounds();
  196. m_Map.SetBounds(rect);
  197. }
  198. void CMapXViewView::OnButton8() 
  199. {
  200. // TODO: Add your control notification handler code here
  201. //1、图层数量
  202. CMapXLayers layers = m_Map.GetLayers();
  203. CMapXLayer layer;
  204. int nLayerCount = layers.GetCount();
  205. ///2、遍历图层
  206. for(int i=0;i<nLayerCount;i++)
  207. {
  208. layer = layers.Item(i+1);
  209. m_Layers.AddString(layer.GetName());
  210. // AfxMessageBox(layer.GetName());
  211. }
  212. m_Layers.SetCurSel(0);
  213. // 遍历图层可以得到每一个图层对象Layer,并对每一个图层对象可以遍历图层对象的属性、操作图层。如设置图层的可见性:
  214. //layer.SetVisible(FALSE);
  215. CMapXFeatures fs;
  216. layer = layers.Item(1);
  217. fs=layer.AllFeatures();
  218.     m_ListFs.ResetContent();
  219. //遍历层对象
  220.     for(i=0;i<fs.GetCount();i++)
  221.     {
  222. m_ListFs.AddString(fs.Item(i+1).GetName());//m_ListInfo为定义的ListBox控件
  223.     }
  224. }
  225. void CMapXViewView::OnSelchangeCombo1() 
  226. {
  227. // TODO: Add your control notification handler code here
  228. CMapXLayers layers = m_Map.GetLayers();
  229. CMapXLayer layer;
  230. int nCurSel = m_Layers.GetCurSel();
  231. CMapXFeatures fs;
  232. layer = layers.Item(nCurSel+1);
  233. fs=layer.AllFeatures();
  234.     m_ListFs.ResetContent();
  235. //遍历层对象
  236.     for(int i=0;i<fs.GetCount();i++)
  237.     {
  238. m_ListFs.AddString(fs.Item(i+1).GetName());//m_ListInfo为定义的ListBox控件
  239.     }
  240. }
  241. BEGIN_EVENTSINK_MAP(CMapXViewView, CFormView)
  242.     //{{AFX_EVENTSINK_MAP(CMapXViewView)
  243. ON_EVENT(CMapXViewView, IDC_MAP1, -606 /* MouseMove */, OnMouseMoveMap1, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
  244. ON_EVENT(CMapXViewView, IDC_MAP1, -605 /* MouseDown */, OnMouseDownMap1, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
  245. ON_EVENT(CMapXViewView, IDC_MAP1, 3 /* ToolUsed */, OnToolUsedMap1, VTS_I2 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_R8 VTS_BOOL VTS_BOOL VTS_PBOOL)
  246. ON_EVENT(CMapXViewView, IDC_MAP1, 11 /* PolyToolUsed */, OnPolyToolUsedMap1, VTS_I2 VTS_I4 VTS_DISPATCH VTS_BOOL VTS_BOOL VTS_PBOOL)
  247. ON_EVENT(CMapXViewView, IDC_MAP2, 15 /* MapDraw */, OnMapDrawMap2, VTS_I2)
  248. ON_EVENT(CMapXViewView, IDC_MAP1, 6 /* MapViewChanged */, OnMapViewChangedMap1, VTS_NONE)
  249. ON_EVENT(CMapXViewView, IDC_MAP2, -605 /* MouseDown */, OnMouseDownMap2, VTS_I2 VTS_I2 VTS_R4 VTS_R4)
  250. //}}AFX_EVENTSINK_MAP
  251. END_EVENTSINK_MAP()
  252. void CMapXViewView::OnMouseMoveMap1(short Button, short Shift, float X, float Y) 
  253. {
  254. // TODO: Add your control notification handler code here
  255. double dX,dY;
  256. m_Map.ConvertCoord(&X,&Y,&dX,&dY,miScreenToMap );
  257. m_XY.Format("X:%.3f  Y:%.3f",dX,dY);
  258. UpdateData(FALSE);
  259. }
  260. void CMapXViewView::OnButton9() 
  261. {
  262. // TODO: Add your control notification handler code here
  263. nPtNum = 0;
  264. m_Map.SetMousePointer(miCrossCursor);
  265. }
  266. #include <cmath>
  267. void CMapXViewView::OnMouseDownMap1(short Button, short Shift, float X, float Y) 
  268. {
  269. // TODO: Add your control notification handler code here
  270. double dX,dY;
  271. m_Map.ConvertCoord(&X,&Y,&dX,&dY,miScreenToMap );
  272. if(nPtNum==0)
  273. {
  274. XX[0] = dX;
  275. YY[0] = dY;
  276. nPtNum++;
  277. }
  278. else if(nPtNum>0)
  279. {
  280. XX[1] = dX;
  281. YY[1] = dY;
  282. double dDist = sqrt((XX[1]-XX[0])*(XX[1]-XX[0])+(YY[1]-YY[0])*(YY[1]-YY[0]));
  283. CString str;
  284. str.Format("Distance = %.3f",dDist);
  285. AfxMessageBox(str);
  286. nPtNum = 0;
  287. }
  288. }
  289. void CMapXViewView::OnButton11() 
  290. {
  291. // TODO: Add your control notification handler code here
  292. m_Map.CreateCustomTool(102,miToolTypeLine,miSizeCursor);
  293. m_Map.SetCurrentTool(102);
  294. m_Map.SetMousePointer(miCrossCursor);
  295. }
  296. void CMapXViewView::OnButton10() 
  297. {
  298. // TODO: Add your control notification handler code here
  299. m_Map.CreateCustomTool(302,miToolTypePolygon, miSizeCursor);
  300. m_Map.SetCurrentTool(302);
  301. m_Map.SetMousePointer(miCrossCursor);
  302. }
  303. void CMapXViewView::OnToolUsedMap1(short ToolNum, double X1, double Y1,
  304.    double X2, double Y2, 
  305.    double Distance, BOOL Shift, BOOL Ctrl, BOOL FAR* EnableDefault) 
  306. {
  307. // TODO: Add your control notification handler code here
  308. if(ToolNum==102)
  309. {
  310. CString str;
  311. str.Format("Distance = %.2f",Distance);
  312. AfxMessageBox(str);
  313. }
  314. //点空间查询
  315. else if(ToolNum==202)
  316. {
  317. CMapXLayers layers=m_Map.GetLayers();
  318. CMapXLayer layer = layers.Item(1);
  319. CMapXPoint point;
  320. CMapXFeatures fs;
  321. CString str;
  322. if(!point.CreateDispatch(point.GetClsid()))
  323. {
  324. return;
  325. }
  326.         point.Set((double)X1,(double)Y1);
  327. //查询语句
  328.        fs=layer.SearchAtPoint(point,miSearchResultAll);
  329.     for(int n=0;n<fs.GetCount();n++)
  330. {
  331.     if(fs.Item(n+1).GetType()==0)/////判断获得的地物的形状是否为多边形
  332. str.Format(" The Aera of %s is:%lfrn",fs.Item(n+1).GetName(),fs.Item(n+1).GetArea());
  333.     else   
  334. str.Format(" the ID of %s is:%srn ",fs.Item(n+1).GetName(),fs.Item(n+1).GetFeatureID());
  335. }
  336.         str="the result searched by Point is:rn"+str;
  337. AfxMessageBox(str);
  338. m_Map.SetCenterX(X1);
  339.     m_Map.SetCenterY(Y1);
  340. //把查询结果放入选择集中显示
  341. CMapXSelection Selection=layer.GetSelection();
  342. Selection.SelectByPoint(X1,Y1,0);
  343. }
  344. //园查询
  345. else if(ToolNum==203)
  346. {
  347. CMapXFeatures fs;
  348. CMapXPoint point;
  349. if(!point.CreateDispatch(point.GetClsid()))
  350. {
  351. TRACE0("Failed to Create Circle Pobject");
  352. return;
  353. }
  354. point.Set(X1,Y1);
  355. CMapXLayers layers=m_Map.GetLayers();
  356. CMapXLayer layer = layers.Item(1);
  357. fs=layer.SearchWithinDistance(point,Distance,0,miSearchResultAll);/////圆查询的范围
  358. m_Map.SetCenterX(X1);
  359. m_Map.SetCenterY(Y1);
  360. CMapXSelection Selection =layer.GetSelection();
  361. Selection.SelectByRadius(X1,Y1,Distance, 0);
  362. Invalidate();
  363. }
  364. else if(ToolNum==204)
  365. {
  366. CMapXFeatures fs;
  367. CMapXRectangle rec;
  368. if(!rec.CreateDispatch(rec.GetClsid()))
  369. {
  370.  TRACE0("Failed to Create Rectangle Pobject");
  371.  return;
  372. }
  373. rec.Set(X1,Y1,X2,Y2);
  374. CMapXLayers layers=m_Map.GetLayers();
  375. CMapXLayer layer = layers.Item(1);
  376. fs=layer.SearchWithinRectangle(rec,miSearchResultAll);/////矩形查询的范围
  377. m_Map.SetCenterX(X1);
  378. m_Map.SetCenterY(Y1);
  379. CMapXSelection Selection =layer.GetSelection();
  380. Selection.SelectByRectangle(X1,Y1,X2,Y2, 0);
  381. Invalidate();
  382. }
  383. else if(ToolNum==205)
  384. {
  385. CMapXLayers layers=m_Map.GetLayers();
  386. CMapXFeature feature; //声明Feature变量
  387. if(!feature.CreateDispatch(feature.GetClsid())) {
  388.   TRACE0("Failed to Create Feature object");
  389.   return;
  390. }
  391. //创建图层
  392. if(m_PtLayer==NULL)
  393. {
  394. m_PtLayer = layers.CreateLayer("PointLayer");
  395. }
  396. else
  397. {
  398. m_PtLayer = layers.Item("PointLayer");
  399. }
  400. //创建特征对象
  401. feature.Attach(m_Map.GetDispatch());
  402. //设置类型
  403. feature.SetType(miFeatureTypeSymbol);
  404. feature.SetStyle(m_Map.GetDefaultStyle());
  405. CMapXStyle style=feature.GetStyle();
  406. style.SetSymbolType(miSymbolTypeBitmap);
  407. style.SetSymbolBitmapSize(12);
  408. style.SetSymbolBitmapTransparent(TRUE);
  409. style.SetSymbolBitmapName("D:\Program Files\MapInfo\MapX 5.0\CUSTSYMB\CAR1-32.BMP");
  410. feature.SetStyle(style);/**/
  411. feature.GetPoint().Set(X1,Y1);
  412. //将结果添加到图层里面
  413. m_PtLayer.AddFeature(feature);
  414. Invalidate();
  415. }
  416. //添加线对象
  417. else if(ToolNum==206)
  418. {
  419. CMapXLayers layers=m_Map.GetLayers();
  420. CMapXFeature feature; //声明Feature变量
  421. if(!feature.CreateDispatch(feature.GetClsid())) {
  422.   TRACE0("Failed to Create Feature object");
  423.   return;
  424. }
  425. //创建图层
  426. if(m_LineLayer==NULL)
  427. {
  428. m_LineLayer = layers.CreateLayer("LineLayer");
  429. }
  430. else
  431. {
  432. m_LineLayer = layers.Item("LineLayer");
  433. }
  434. CMapXPoints points; //声明Points变量
  435. //设置类型
  436. points.CreateDispatch(points.GetClsid());
  437. points.AddXY(X1,Y1); //添加顶点1
  438. points.AddXY(X2,Y2); //添加顶点2
  439. COleVariant vtPoints;
  440. vtPoints.vt = VT_DISPATCH;
  441. vtPoints.pdispVal = points.m_lpDispatch;
  442. vtPoints.pdispVal->AddRef();
  443. CMapXFeatureFactory cFactory= m_Map.GetFeatureFactory();
  444. //创建特征对象
  445. feature = cFactory.CreateLine(vtPoints);
  446. feature.SetType(miFeatureTypeLine);
  447. //设置线型
  448. CMapXStyle style=feature.GetStyle();
  449. style.SetLineColor(miColorRed);
  450. style.SetLineStyle(93);
  451. feature.SetStyle(style.m_lpDispatch);
  452. //将结果添加到图层里面
  453. m_LineLayer.AddFeature(feature);
  454. Invalidate();
  455. }
  456. else if(ToolNum==309)
  457. {
  458. CMapXLayers layers=m_Map.GetLayers();
  459. CMapXFeature feature; //声明Feature变量
  460. if(!feature.CreateDispatch(feature.GetClsid())) {
  461.   TRACE0("Failed to Create Feature object");
  462.   return;
  463. }
  464. //创建图层
  465. if(m_TrLayer==NULL)
  466. {
  467. m_TrLayer = layers.CreateLayer("TrackLayer");
  468. }
  469. else
  470. {
  471. m_TrLayer = layers.Item("TrackLayer");
  472. }
  473. //创建特征对象
  474. feature.Attach(m_Map.GetDispatch());
  475. //设置类型
  476. feature.SetType(miFeatureTypeSymbol);
  477. feature.SetStyle(m_Map.GetDefaultStyle());
  478. CMapXStyle style=feature.GetStyle();
  479. feature.GetPoint().Set(X1,Y1);
  480. //将结果添加到图层里面
  481. m_TrLayer.AddFeature(feature);
  482. bEvent = TRUE;
  483. Invalidate();
  484. }
  485. }
  486. void CMapXViewView::OnPolyToolUsedMap1(short ToolNum, long Flags, 
  487.    LPDISPATCH Points, 
  488.    BOOL bShift, BOOL bCtrl, BOOL FAR* EnableDefault) 
  489. {
  490. // TODO: Add your control notification handler code here
  491. if(Flags==miPolyToolEnd)
  492. if(ToolNum==302)
  493. {
  494. CMapXFeatureFactory cFactory=m_Map.GetFeatureFactory();
  495. CMapXFeature feature; //声明Feature变量
  496. COleVariant vtPoints;
  497. vtPoints.vt = VT_DISPATCH;
  498. vtPoints.pdispVal = Points;
  499. vtPoints.pdispVal->AddRef();
  500. feature=cFactory.CreateRegion(vtPoints); 
  501. CString str;
  502. str.Format("Area = %.2f",feature.GetArea());
  503. AfxMessageBox(str);
  504. }
  505. //添加多边形
  506. else if(ToolNum==303)
  507. {
  508. CMapXLayers layers=m_Map.GetLayers();
  509. CMapXFeature feature; //声明Feature变量
  510. if(!feature.CreateDispatch(feature.GetClsid())) {
  511.   TRACE0("Failed to Create Feature object");
  512.   return;
  513. }
  514. //创建图层
  515. if(m_PolyLayer==NULL)
  516. {
  517. m_PolyLayer = layers.CreateLayer("PolyLayer");
  518. }
  519. else
  520. {
  521. m_PolyLayer = layers.Item("PolyLayer");
  522. }
  523. CMapXPoints pts;
  524.     pts.AttachDispatch(Points,FALSE);
  525. COleVariant vtPoints;
  526. vtPoints.vt = VT_DISPATCH;
  527. vtPoints.pdispVal = pts.m_lpDispatch;
  528. vtPoints.pdispVal->AddRef();
  529. CMapXFeatureFactory cFactory= m_Map.GetFeatureFactory();
  530. //创建特征对象
  531. feature = cFactory.CreateRegion(vtPoints);
  532. //设置线型
  533. CMapXStyle style=feature.GetStyle();
  534. style.SetRegionPattern(miPatternCross); //设置填充方式
  535. style.SetRegionBorderColor(miColorRed); //设置边框颜色
  536. style.SetRegionBorderWidth(2); //设置边框宽度
  537. feature.SetStyle(style.m_lpDispatch);
  538. //将结果添加到图层里面
  539. m_PolyLayer.AddFeature(feature);
  540. Invalidate();
  541. }
  542. }
  543. void CMapXViewView::OnButton12() 
  544. {
  545. // TODO: Add your control notification handler code here
  546. UpdateData(TRUE);
  547. CMapXLayers layers=m_Map.GetLayers();
  548. CMapXLayer layer = layers.Item(1);
  549. //定义查询对象
  550. CMapXLayerFind find = layer.GetFind();
  551. //得到查询对象
  552.     CMapXFindFeature  FoundObject;
  553. FoundObject = find.Search(m_strQuery);
  554. //获取查询对象信息
  555. CString str;
  556. if( FoundObject.GetType()==0)///判断地物是否为多边形
  557. {
  558.   str.Format("Area = %.2f",FoundObject.GetArea());
  559. }
  560.  
  561.     str=FoundObject.GetName()+"'s Area is: "+str;
  562. AfxMessageBox(str);
  563. //将地图定位至查询对象的中心
  564. double dX,dY;
  565. dX = FoundObject.GetCenterX();
  566. dY = FoundObject.GetCenterY();
  567. m_Map.SetCenterX(dX);
  568. m_Map.SetCenterY(dY);
  569. //将查询对象放至选择集
  570. CMapXSelection Selection = layer.GetSelection();
  571. Selection.SelectByPoint(dX,dY, miSelectionNew);
  572. }
  573. void CMapXViewView::OnButton13() 
  574. {
  575. // TODO: Add your control notification handler code here
  576. m_Map.CreateCustomTool(202,miToolTypePoint,miCrossCursor);
  577. m_Map.SetCurrentTool(202);
  578. }
  579. void CMapXViewView::OnButton14() 
  580. {
  581. // TODO: Add your control notification handler code here
  582. m_Map.CreateCustomTool(203,miToolTypeCircle,miCrossCursor);
  583. m_Map.SetCurrentTool(203);
  584. }
  585. void CMapXViewView::OnButton15() 
  586. {
  587. // TODO: Add your control notification handler code here
  588. m_Map.CreateCustomTool(204,miToolTypeMarquee,miCrossCursor);
  589. m_Map.SetCurrentTool(204);
  590. }
  591. void CMapXViewView::OnButton16() 
  592. {
  593. // TODO: Add your control notification handler code here
  594. CMapXLayers layers=m_Map.GetLayers();
  595. CMapXLayer layer = layers.Item(1);
  596. COleVariant rsVariant;
  597.     rsVariant.vt = VT_DISPATCH;
  598. rsVariant.pdispVal = layer;
  599. CMapXDatasets datasets = m_Map.GetDatasets();
  600. //////
  601. datasets.Add(miDataSetLayer,rsVariant);
  602. CMapXDataset dataset = datasets.Item(1);
  603. CMapXFields fields = dataset.GetFields();
  604. for(int i=0;i<fields.GetCount();i++)
  605. {
  606. CMapXField field = fields.Item(i+1);
  607. // AfxMessageBox(fields.Item(i+1).GetName());
  608. }
  609. //得到具体的字段值
  610. COleVariant valueVt;
  611. for(i=0;i<fields.GetCount();i++)
  612. {
  613. valueVt = dataset.GetValue(1,i+1);
  614. valueVt.ChangeType(VT_BSTR);
  615. CString str = valueVt.bstrVal;
  616. AfxMessageBox(str);
  617. }/**/
  618. }
  619. void CMapXViewView::OnButton17() 
  620. {
  621. // TODO: Add your control notification handler code here
  622. CMapXLayers layers=m_Map.GetLayers();
  623. CMapXLayer layer = layers.Item(1);
  624. COleVariant rsVariant;
  625.     rsVariant.vt = VT_DISPATCH;
  626. rsVariant.pdispVal = layer;
  627. //绑定层的属性数据表
  628. CMapXDatasets datasets = m_Map.GetDatasets();
  629. datasets.Add(miDataSetLayer,rsVariant);
  630. CMapXDataset dataset = datasets.Item(1);
  631. CMapXThemes themes = dataset.GetThemes();
  632. if(themes.GetCount!=0)
  633. {
  634. themes.RemoveAll();
  635. }
  636. themes.Add(miThemeDotDensity, 5,"AAA");
  637. CMapXTheme theme = themes.Item("AAA");
  638. theme.ThemeDlg();
  639. }
  640. void CMapXViewView::OnButton18() 
  641. {
  642. // TODO: Add your control notification handler code here
  643. CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"BMP File(*.bmp)|*.bmp|");
  644. CString str;
  645. if(dlg.DoModal()==IDOK)
  646. {
  647. str=dlg.GetPathName();
  648. m_Map.ExportMap(str,miFormatBMP);
  649. }
  650. }
  651. void CMapXViewView::OnButton19() 
  652. {
  653. // TODO: Add your control notification handler code here
  654. m_Map.CreateCustomTool(205,miToolTypePoint,miCrossCursor);
  655. m_Map.SetCurrentTool(205);
  656. }
  657. void CMapXViewView::OnButton20() 
  658. {
  659. // TODO: Add your control notification handler code here
  660. m_Map.CreateCustomTool(206,miToolTypeLine,miCrossCursor);
  661. m_Map.SetCurrentTool(206);
  662. }
  663. void CMapXViewView::OnButton21() 
  664. {
  665. // TODO: Add your control notification handler code here
  666. m_Map.CreateCustomTool(303,miToolTypePolygon, miSizeCursor);
  667. m_Map.SetCurrentTool(303);
  668. }
  669. void CMapXViewView::OnMapDrawMap2(short Flag) 
  670. {
  671. // TODO: Add your control notification handler code here
  672. double X1,Y1,X2,Y2; //声明坐标变量
  673. //声明FeatureFactory变量并获取缺省值
  674. CMapXFeatureFactory cFactory=m_EyeMap.GetFeatureFactory();
  675. CMapXLayer layer; //声明图层变量
  676. CMapXFeature feature; //声明Feature变量
  677. CMapXFeatures features; //声明Features变量
  678. CMapXPoints points; //声明Points变量
  679. points.CreateDispatch(points.GetClsid());
  680. CMapXRectangle rect; //声明矩形变量
  681. rect.CreateDispatch(rect.GetClsid());
  682. //获取主图的边界,根据这个边界值,在鹰眼图上添加一个矩形Feature
  683. rect = m_Map.GetBounds();
  684. X1 = rect.GetXMin(); //获得矩形左上顶点x坐标
  685. Y1 = rect.GetYMin(); //获得矩形左上顶点y坐标
  686. X2 = rect.GetXMax(); //获得矩形右下顶点x坐标
  687. Y2 = rect.GetYMax(); //获得矩形右下顶点y坐标
  688. //得到添加矩形Feature的图层
  689. layer=m_EyeMap.GetLayers().Item("Rectangle");
  690. features=layer.AllFeatures();
  691. //没有添加矩形Feature的图层,则新建
  692. if(features.GetCount() == 0)
  693. {
  694. //添加四个顶点构成一个矩形框
  695. points.AddXY(X1,Y1); //添加顶点1
  696. points.AddXY(X1,Y2); //添加顶点2
  697. points.AddXY(X2,Y2); //添加顶点3
  698. points.AddXY(X2,Y1); //添加顶点4
  699. //创建矩形Feature
  700. COleVariant vtPoints;
  701. vtPoints.vt = VT_DISPATCH;
  702. vtPoints.pdispVal = points.m_lpDispatch;
  703. vtPoints.pdispVal->AddRef();
  704. feature=cFactory.CreateRegion(vtPoints); 
  705. //设置矩形Feature的属性
  706. CMapXStyle style=feature.GetStyle();
  707. style.SetRegionPattern(miPatternNoFill); //设置矩形的填充方式
  708. style.SetRegionBorderColor(miColorRed); //设置矩形边框颜色
  709. style.SetRegionBorderWidth(2); //设置矩形边框宽度
  710. feature.SetStyle(style.m_lpDispatch);
  711. //添加已经创建的矩形Feature
  712. m_eaglefeature = layer.AddFeature(feature);
  713. }
  714. }
  715. void CMapXViewView::OnMapViewChangedMap1() 
  716. {
  717. // TODO: Add your control notification handler code here
  718. if(!m_bHasMap)
  719. return;
  720.     double X1,Y1,X2,Y2; //声明坐标变量
  721. CMapXRectangle rect; //声明矩形变量
  722. rect.CreateDispatch(rect.GetClsid());
  723. //获取主图的边界,根据这个边界值,在鹰眼图上添加一个矩形Feature
  724. rect = m_Map.GetBounds();
  725. X1 = rect.GetXMin(); //获得矩形左上顶点x坐标
  726. Y1 = rect.GetYMin(); //获得矩形左上顶点y坐标
  727. X2 = rect.GetXMax(); //获得矩形右下顶点x坐标
  728. Y2 = rect.GetYMax(); //获得矩形右下顶点y坐标
  729. CMapXLayer layer=m_EyeMap.GetLayers().Item("Rectangle");
  730. if(m_eaglefeature==NULL)
  731. {
  732. }
  733. else
  734. {
  735. m_eaglefeature.GetParts().Item(1).RemoveAll(); //除去已有的顶点
  736. m_eaglefeature.GetParts().Item(1).AddXY(X1,Y1); //添加顶点1
  737. m_eaglefeature.GetParts().Item(1).AddXY(X1,Y2); //添加顶点2
  738. m_eaglefeature.GetParts().Item(1).AddXY(X2,Y2); //添加顶点3
  739. m_eaglefeature.GetParts().Item(1).AddXY(X2,Y1); //添加顶点4
  740. m_eaglefeature.Update(); //更新Feature属性
  741. }
  742. //更新显示图层
  743. layer.Refresh();
  744. }
  745. void CMapXViewView::OnMouseDownMap2(short Button, short Shift, float X, float Y) 
  746. {
  747. // TODO: Add your control notification handler code here
  748. double m_x,m_y;
  749. m_EyeMap.ConvertCoord(&X,&Y,&m_x,&m_y,1);
  750. m_Map.SetCenterX(m_x);
  751. m_Map.SetCenterY(m_y);
  752. }
  753. void CMapXViewView::OnTimer(UINT nIDEvent) 
  754. {
  755. // TODO: Add your message handler code here and/or call default
  756. if(nIDEvent==1&&bEvent)
  757. {
  758. CMapXLayer layer=m_Map.GetLayers().Item("TrackLayer");
  759. CMapXFeatures fs = layer.AllFeatures();
  760. CMapXFeature f;
  761. int fsCount = fs.GetCount();
  762. for(int i=0;i<fsCount;i++)
  763. {
  764. f = fs.Item(i+1);
  765. f.Offset(0.5,0.5);
  766. f.Update();
  767. }
  768. layer.Refresh();
  769. }
  770. CFormView::OnTimer(nIDEvent);
  771. }
  772. void CMapXViewView::OnButton22() 
  773. {
  774. // TODO: Add your control notification handler code here
  775. SetTimer(1,500,NULL);
  776. m_Map.CreateCustomTool(309,miToolTypePoint,miCrossCursor);
  777. m_Map.SetCurrentTool(309);
  778. }