From 4236fe86ba015d98a805e17ffd736a3f96677c8a Mon Sep 17 00:00:00 2001 From: zhaipx Date: Thu, 9 Nov 2023 08:57:28 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E5=9C=B0=E5=9B=BE=E5=AE=9A?= =?UTF-8?q?=E4=BD=8D=E6=97=A0=E6=B3=95=E6=89=8B=E5=8A=A8=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E7=BB=8F=E7=BA=AC=E5=BA=A6=E7=9A=84bug=EF=BC=9B2.=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=9C=B0=E5=9B=BE=E5=AE=9A=E4=BD=8D=E5=BA=A6=E5=88=86?= =?UTF-8?q?=E7=A7=92=E5=BD=A2=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GISControlDlg.aps | Bin 88804 -> 115040 bytes GISControlDlg.rc | 24 +++++----- GISDlg.cpp | 4 +- LonLatDlg.cpp | 97 ++++++++++++++++++++++++++++++++++++----- LonLatDlg.h | 16 +++++-- ModifyLinePointDlg.cpp | 3 -- angle.cpp | 17 ++++++++ angle.h | 4 +- resource.h | 3 +- 9 files changed, 137 insertions(+), 31 deletions(-) diff --git a/GISControlDlg.aps b/GISControlDlg.aps index 72999e4693e01be21de90c18dd22896b67d0eff8..498ea36aae8d74be2d64a898aafbf97150022338 100644 GIT binary patch delta 18300 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 diff --git a/GISControlDlg.rc b/GISControlDlg.rc index f278b21..cf48b73 100644 --- a/GISControlDlg.rc +++ b/GISControlDlg.rc @@ -115,19 +115,19 @@ BEGIN CONTROL "",IDC_TREE,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_CHECKBOXES | WS_BORDER | WS_HSCROLL | WS_TABSTOP,0,0,107,110,WS_EX_CLIENTEDGE END -IDD_XY_DIALOG DIALOGEX 0, 0, 103, 43 +IDD_XY_DIALOG DIALOGEX 0, 0, 112, 79 STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "地图定位" FONT 9, "微软雅黑", 400, 0, 0x86 BEGIN - LTEXT "经度:",IDC_STATIC,3,3,26,8 - EDITTEXT IDC_EDIT_LON,26,1,65,12,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE - LTEXT "纬度:",IDC_STATIC,3,16,26,8 - EDITTEXT IDC_EDIT_LAT,26,14,65,12,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE - LTEXT "°",IDC_STATIC,95,0,8,8 - LTEXT "°",IDC_STATIC,95,13,8,8 - PUSHBUTTON "确定",IDC_CONFIRM_BTN,58,31,41,10 - CONTROL "手动输入",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,30,43,10 + LTEXT "经度:",IDC_STATIC,6,24,26,8 + EDITTEXT IDC_EDIT_LON,39,22,65,12,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE + LTEXT "纬度:",IDC_STATIC,6,40,26,8 + EDITTEXT IDC_EDIT_LAT,39,38,65,12,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_CLIENTEDGE + PUSHBUTTON "确定",IDC_CONFIRM_BTN,59,55,41,13 + CONTROL "手动输入",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,55,43,13 + LTEXT "坐标类型:",IDC_STATIC,5,9,36,8 + COMBOBOX IDC_COMBO_TYPE_XY,39,8,65,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END IDD_DISTANCE_DIALOG DIALOGEX 0, 0, 161, 56 @@ -345,13 +345,13 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "确定",IDOK,11,97,50,14 PUSHBUTTON "取消",IDCANCEL,71,97,50,14 - LTEXT "坐标类型:",IDC_STATIC,11,26,40,10 + LTEXT "坐标类型:",IDC_STATIC,11,26,47,10 LTEXT "经度:",IDC_STATIC,11,43,40,10 EDITTEXT IDC_EDIT_LON,50,41,70,15,ES_AUTOHSCROLL,WS_EX_RIGHT LTEXT "纬度:",IDC_STATIC,11,62,40,10 EDITTEXT IDC_EDIT_LAT,50,59,70,15,ES_AUTOHSCROLL,WS_EX_RIGHT COMBOBOX IDC_COMBO_TYPE,50,25,70,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - CONTROL "设置为盘旋点",IDC_SETCIRCLINGPOINT,"Button",BS_AUTORADIOBUTTON,11,81,59,10 + CONTROL "设置为盘旋点",IDC_SETCIRCLINGPOINT,"Button",BS_AUTORADIOBUTTON,11,81,67,10 LTEXT "航点号:",IDC_STATIC,12,9,34,10 COMBOBOX IDC_COMBO_POINTID,50,8,70,63,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END @@ -411,6 +411,8 @@ BEGIN IDD_XY_DIALOG, DIALOG BEGIN + RIGHTMARGIN, 109 + BOTTOMMARGIN, 75 END IDD_DISTANCE_DIALOG, DIALOG diff --git a/GISDlg.cpp b/GISDlg.cpp index 97d1102..fc1f817 100644 --- a/GISDlg.cpp +++ b/GISDlg.cpp @@ -2470,7 +2470,7 @@ void CGISDlg::MouseMoveMap1(short Button, short Shift, long x, long y) return; } - //显示经纬度坐标时 + //显示经纬度坐标时(地图定位) if (m_bHaveShowLonLatDlg && m_pLonLatDlg ->GetAutoEditStatus()) { double dX = 0; @@ -2877,7 +2877,7 @@ void CGISDlg::DrawLineLabel(long &drawLayerID, const double ptLon1, const double labelCategory.SetFontName(_T("Times New Roman")); labelCategory.SetFontSize(10); - labesPtr.AddLabel(str, textLon, textLat, 0, 0); + //labesPtr.AddLabel(str, textLon, textLat, 0, 0); } //重绘 diff --git a/LonLatDlg.cpp b/LonLatDlg.cpp index 5432f67..4b07326 100644 --- a/LonLatDlg.cpp +++ b/LonLatDlg.cpp @@ -14,9 +14,10 @@ IMPLEMENT_DYNAMIC(CLonLatDlg, CDialog) CLonLatDlg::CLonLatDlg(CWnd* pParent /*=NULL*/) : CDialog(CLonLatDlg::IDD, pParent) { - + //EnableVisualManagerStyle(TRUE, TRUE); m_lon = 0.0; m_lat = 0.0; + posTypeID = 0; } CLonLatDlg::~CLonLatDlg() @@ -28,15 +29,18 @@ void CLonLatDlg::DoDataExchange(CDataExchange* pDX) CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDIT_LON, m_lon); DDX_Text(pDX, IDC_EDIT_LAT, m_lat); + DDX_Control(pDX, IDC_EDIT_LON, m_lon_edit); + DDX_Control(pDX, IDC_EDIT_LAT, m_lat_edit); + DDX_Control(pDX, IDC_COMBO_TYPE_XY, m_coord_type); } BEGIN_MESSAGE_MAP(CLonLatDlg, CDialog) ON_BN_CLICKED(IDC_CONFIRM_BTN, &CLonLatDlg::OnBnClickedConfirmBtn) ON_BN_CLICKED(IDC_CHECK1, &CLonLatDlg::OnBnClickedCheck1) + ON_CBN_SELCHANGE(IDC_COMBO_TYPE_XY, &CLonLatDlg::OnCbnSelchangeComboType) END_MESSAGE_MAP() - // CLonLatDlg 消息处理程序 //获取是否手动输入状态 @@ -50,11 +54,20 @@ bool CLonLatDlg::GetAutoEditStatus() //输入:经度lon,纬度lat void CLonLatDlg::SetLonLatInfo(const double lon, const double lat) { - m_lon = lon; - m_lat = lat; - - UpdateData(FALSE); - //UpdateData(TRUE); + if (posTypeID==0) //度 + { + m_lon = lon; + m_lat = lat; + UpdateData(FALSE); + } + else if (posTypeID==1) // 度分秒 + { + string str_lat,str_lon; + angle.getDMSString(lon,lat,str_lon,str_lat); + SetDlgItemText(IDC_EDIT_LON,str_lon.c_str()); + SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str()); + } + } void CLonLatDlg::OnCancel() @@ -84,15 +97,17 @@ BOOL CLonLatDlg::OnInitDialog() m_CheckBox.SubclassDlgItem(IDC_CHECK1, this); m_CheckBox.SetCheck(BST_UNCHECKED); // 设置默认未选中状态 - m_isMouseMove = true; + m_isMouseMove = true; + m_coord_type.AddString(_T("度")); + m_coord_type.AddString(_T("度分秒")); + m_coord_type.SetCurSel(0); + lastTypeID = 0; return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } - - void CLonLatDlg::OnBnClickedConfirmBtn() { // TODO: 在此添加控件通知处理程序代码 @@ -108,6 +123,7 @@ void CLonLatDlg::OnBnClickedConfirmBtn() } +// ‘手动输入’单选框变化时触发函数 void CLonLatDlg::OnBnClickedCheck1() { // TODO: 在此添加控件通知处理程序代码 @@ -115,10 +131,71 @@ void CLonLatDlg::OnBnClickedCheck1() { // 复选框被选中 m_isMouseMove = false; + // 文本框设为可编辑 + m_lon_edit.SetReadOnly(FALSE); + m_lat_edit.SetReadOnly(FALSE); } else { // 复选框未选中 m_isMouseMove = true; + // 文本框设为只读 + m_lon_edit.SetReadOnly(TRUE); + m_lat_edit.SetReadOnly(TRUE); + } +} + + +// 坐标类型改变事件 +void CLonLatDlg::OnCbnSelchangeComboType() +{ + std::string splitSymbol = "EWNSs+\/-,;°度′'’分\""”秒、,; "; + CString strLat,strLon; + m_lat_edit.GetWindowTextA(strLat); + m_lon_edit.GetWindowTextA(strLon); + + posTypeID = m_coord_type.GetCurSel(); + //TRACE(_T("当前选择 %d\n"),posTypeID); + if (lastTypeID == posTypeID) //类型未改变,不执行坐标变换 + { + return; + } + else + { + lastTypeID = posTypeID; // 更新坐标方式 + } + + if (posTypeID==0) //度 + { + double tarLon,tarLat; + + vector vec_lat = angle.split(strLat.GetBuffer(),splitSymbol); + vector vec_lon = angle.split(strLon.GetBuffer(),splitSymbol); + + int lon_d = stoi(vec_lon.at(0)); + int lon_m = stoi(vec_lon.at(1)); + double lon_s = stod(vec_lon.at(2)); + angle.DmstoDeg(lon_d,lon_m,lon_s,tarLon); + + int lat_d = stoi(vec_lat.at(0)); + int lat_m = stoi(vec_lat.at(1)); + double lat_s = stod(vec_lat.at(2)); + angle.DmstoDeg(lat_d,lat_m,lat_s,tarLat); + + + SetDlgItemText(IDC_EDIT_LON,angle.DoubleToString(tarLon).c_str()); + SetDlgItemText(IDC_EDIT_LAT,angle.DoubleToString(tarLat).c_str()); + } + else if (posTypeID==1) //度分秒 + { + double lat,lon; + lat = _tstof(strLat); + lon = _tstof(strLon); + + string str_lat,str_lon; + angle.getDMSString(lon,lat,str_lon,str_lat); + + SetDlgItemText(IDC_EDIT_LON,str_lon.c_str()); + SetDlgItemText(IDC_EDIT_LAT,str_lat.c_str()); } } diff --git a/LonLatDlg.h b/LonLatDlg.h index 11c82b4..66eb2ee 100644 --- a/LonLatDlg.h +++ b/LonLatDlg.h @@ -1,9 +1,11 @@ #pragma once #include "resource.h" +#include "afxwin.h" +#include "angle.h" //功能:显示经度、纬度信息 -class CLonLatDlg : public CDialog +class CLonLatDlg : public CDialog //, public CBCGPDialog { DECLARE_DYNAMIC(CLonLatDlg) @@ -33,13 +35,21 @@ private: double m_lon; double m_lat; virtual void OnCancel(); - CRect m_rcDlgArea; - bool m_isMouseMove; CButton m_CheckBox; + int lastTypeID; //(上次选中的)坐标类型 1->度分秒,0->度 + int posTypeID; // 当前坐标类型 1->度分秒,0->度 + Angle angle; public: virtual BOOL OnInitDialog(); afx_msg void OnBnClickedConfirmBtn(); afx_msg void OnBnClickedCheck1(); + // 经度-文本框 + CEdit m_lon_edit; + // 纬度-文本框 + CEdit m_lat_edit; + afx_msg void OnCbnSelchangeComboType(); + // 坐标类型 + CComboBox m_coord_type; }; diff --git a/ModifyLinePointDlg.cpp b/ModifyLinePointDlg.cpp index 878982a..57b464a 100644 --- a/ModifyLinePointDlg.cpp +++ b/ModifyLinePointDlg.cpp @@ -96,9 +96,6 @@ void CModifyLinePointDlg::getDMSString(double lon,double lat,string &str_lon,str string str_lat_s = angle.DoubleToString(lat_s,4); string str_lon_s = angle.DoubleToString(lon_s,4); -/* - str_lon = angle.IntToString(lon_d) + splitSymbol + angle.IntToString(lon_m) + splitSymbol + str_lon_s; - str_lat = angle.IntToString(lat_d) + splitSymbol + angle.IntToString(lat_m) + splitSymbol + str_lat_s;*/ str_lon = angle.IntToString(lon_d) + dSymbol + angle.IntToString(lon_m) + mSymbol + str_lon_s + sSymbol; str_lat = angle.IntToString(lat_d) + dSymbol + angle.IntToString(lat_m) + mSymbol + str_lat_s + sSymbol; } diff --git a/angle.cpp b/angle.cpp index bb356ae..1861e08 100644 --- a/angle.cpp +++ b/angle.cpp @@ -139,3 +139,20 @@ std::wstring Angle::String2WString(const std::string &s) return wstrResult; } +void Angle::getDMSString(double lon,double lat,string &str_lon,string &str_lat) +{ + std::string dSymbol = "°"; + std::string mSymbol = "′"; + std::string sSymbol = "\""; + int lon_d,lon_m,lat_d,lat_m; + double lon_s,lat_s; + DegtoDms(lon,lon_d,lon_m,lon_s); + DegtoDms(lat,lat_d,lat_m,lat_s); + + string str_lat_s = DoubleToString(lat_s,4); + string str_lon_s = DoubleToString(lon_s,4); + + str_lon = IntToString(lon_d) + dSymbol + IntToString(lon_m) + mSymbol + str_lon_s + sSymbol; + str_lat = IntToString(lat_d) + dSymbol + IntToString(lat_m) + mSymbol + str_lat_s + sSymbol; +} + diff --git a/angle.h b/angle.h index 834e24a..866a1c5 100644 --- a/angle.h +++ b/angle.h @@ -31,6 +31,8 @@ public: std::wstring String2WString(const std::string &s); // convert wstring to string std::string WString2String(const std::wstring &ws); - + // 经纬度转字符串度分秒 + void getDMSString(double lon,double lat,string &str_lon,string &str_lat); + }; diff --git a/resource.h b/resource.h index 9053467..614d514 100644 --- a/resource.h +++ b/resource.h @@ -143,6 +143,7 @@ #define IDD_DIALOG2 1049 #define IDD_SAVELINE 1049 #define IDC_BTN_CANCELEDIT 1049 +#define IDC_COMBO_TYPE_XY 1050 #define IDD_DIALOG_LIGHTREGION 1051 #define IDC_EDIT_MARKER_LON 1055 #define IDR_TOOLBAR3 1056 @@ -335,7 +336,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 1078 #define _APS_NEXT_COMMAND_VALUE 32907 -#define _APS_NEXT_CONTROL_VALUE 1050 +#define _APS_NEXT_CONTROL_VALUE 1051 #define _APS_NEXT_SYMED_VALUE 1000 #endif #endif