1.修复地图定位无法手动输入经纬度的bug;2.增加地图定位度分秒形式

pull/4/head
zhaipx 2 years ago
parent 6cdc5482bc
commit 4236fe86ba

Binary file not shown.

@ -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

@ -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);
}
//ÖØ»æ

@ -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<string> vec_lat = angle.split(strLat.GetBuffer(),splitSymbol);
vector<string> 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());
}
}

@ -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;
};

@ -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;
}

@ -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;
}

@ -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);
};

@ -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

Loading…
Cancel
Save