📄 dlgprojection.cpp
字号:
if (dlg.GetZone() > 0) projection.m_dFalseNorthing = 0; // Northern hemisphere
else projection.m_dFalseNorthing = 10000000; // Southern hemisphere
projection.m_dLatitudeOrigin = 0;
projection.m_dLongitudeOrigin = -177+(abs(dlg.GetZone())-1)*6;
projection.m_dScaleFactorAtOrigin = UTM_SCALEFACTOR;
projection.m_dSemiMajorAxis = CEllipsoid::m_aEllipsoids[UTM_INDEX].m_dSemiMajorAxis;
CEllipsoid ellipsoid = CEllipsoid::m_aEllipsoids[UTM_INDEX];
projection.m_dSemiMinorAxis = ellipsoid.GetSemiMinorAxis();
projection.m_lScaleCoords = 1;
projection.m_dMaxEasting = AFX_RFX_DOUBLE_PSEUDO_NULL;
projection.m_dMinEasting = AFX_RFX_DOUBLE_PSEUDO_NULL;
projection.m_dMaxNorthing = AFX_RFX_DOUBLE_PSEUDO_NULL;
projection.m_dMinNorthing = AFX_RFX_DOUBLE_PSEUDO_NULL;
projection.m_sName = CEllipsoid::m_aEllipsoids[UTM_INDEX].m_psName;
BDEnd(BDHandle());
if (BDProjection(BDHandle(), &projection, BDADD))
{
BDEnd(BDHandle());
CDialog::OnOK();
}
}
m_bUTMTip = TRUE;
return 0;
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnAdd()
{
if (AddEdit(TRUE, m_lMaxId+1))
{
m_lMaxId++;
}
m_bUpdate = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnEdit()
{
int index = m_cbProjections.GetCurSel();
if (index != CB_ERR)
{
// Retrieve value from the database
AddEdit(FALSE, m_cbProjections.GetItemData(index));
};
m_bUpdate = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnDelete()
{
CBDProjection projection;
int index = m_cbProjections.GetCurSel();
if (index != CB_ERR)
{
projection.m_nID = m_cbProjections.GetItemData(index);
BDProjection(BDHandle(), &projection, BDDELETE);
BDEnd(BDHandle());
Update(FALSE);
m_cbProjections.SetCurSel(max(0,index-1));
// Store the new default
UpdateDefault();
// Update attributes
OnSelchangeName();
}
m_bUpdate = FALSE;
}
/////////////////////////////////////////////////////////////////////////////
BOOL CDlgProjection::AddEdit(BOOL bAdd, long lId)
{
BOOL bOK = FALSE;
CBDProjection projection;
// Retrieve values from controls
if (m_eName.GetValue(projection.m_sName, FALSE) &&
m_eSemiMajorAxis.GetValue(projection.m_dSemiMajorAxis) &&
m_eSemiMinorAxis.GetValue(projection.m_dSemiMinorAxis) &&
m_eLatitudeOrigin.GetValue(projection.m_dLatitudeOrigin, -90, 90) &&
m_eLongitudeOrigin.GetValue(projection.m_dLongitudeOrigin,-180,180) &&
m_eFalseEasting.GetValue(projection.m_dFalseEasting) &&
m_eFalseNorthing.GetValue(projection.m_dFalseNorthing) &&
m_eScaleFactor.GetValue(projection.m_dScaleFactorAtOrigin) &&
m_eMinEasting.GetValue(projection.m_dMinEasting, -1e20, 1e20, TRUE) &&
m_eMaxEasting.GetValue(projection.m_dMaxEasting, projection.m_dMinEasting, 1e20, TRUE) &&
m_eMinNorthing.GetValue(projection.m_dMinNorthing, -1e20, 1e20, TRUE) &&
m_eMaxNorthing.GetValue(projection.m_dMaxNorthing, projection.m_dMinNorthing, 1e20, TRUE))
{
projection.m_bDefault = TRUE;
projection.m_nID = lId;
// Latitude/longitude
if (m_bLatLon)
{
projection.m_dSemiMajorAxis = LATLON_ID;
projection.m_dSemiMinorAxis = LATLON_ID;
projection.m_dLatitudeOrigin = 0;
projection.m_dFalseEasting = 0;
projection.m_dFalseNorthing = 0;
projection.m_dScaleFactorAtOrigin = 0;
BDProjection()->LatLonToTransMercator(projection.m_dMinNorthing, projection.m_dMinEasting, &projection.m_dMinEasting, &projection.m_dMinNorthing);
BDProjection()->LatLonToTransMercator(projection.m_dMaxNorthing, projection.m_dMaxEasting, &projection.m_dMaxEasting, &projection.m_dMaxNorthing);
}
int iFlag = BDADD;
if (!bAdd) iFlag = BDUPDATE;
if (BDProjection(BDHandle(), &projection, iFlag))
{
bOK = TRUE;
}
BDEnd(BDHandle());
}
Update(FALSE);
return bOK;
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::UpdateDefault()
{
CBDProjection projection;
// Remove previous default
projection.m_nID = m_lDefaultId;
if (BDProjection(BDHandle(), &projection, BDSELECT))
{
projection.m_bDefault = FALSE;
BDEnd(BDHandle());
BDProjection(BDHandle(), &projection, BDUPDATE);
};
BDEnd(BDHandle());
// Set new default
int index = m_cbProjections.GetCurSel();
if (index != CB_ERR)
{
// Retrieve new default
projection.m_nID = m_cbProjections.GetItemData(index);
m_lDefaultId = projection.m_nID;
// Update controls
if (BDProjection(BDHandle(), &projection, BDSELECT))
{
projection.m_bDefault = TRUE;
BDEnd(BDHandle());
BDProjection(BDHandle(), &projection, BDUPDATE);
};
BDEnd(BDHandle());
};
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnSelchangeEllipsoid()
{
m_bLatLon = FALSE;
//m_eName.SetWindowText("");
int index = m_cbEllipsoid.GetCurSel();
if (index != CB_ERR)
{
int i = m_cbEllipsoid.GetItemData(index);
CEllipsoid* pEllipsoid = (CEllipsoid*)(&CEllipsoid::m_aEllipsoids[i]);
if (fabs(pEllipsoid->GetSemiMajorAxis()) > 0.001)
{
m_eSemiMajorAxis.SetValue(pEllipsoid->GetSemiMajorAxis(),ELLIPSOIDDP);
m_eSemiMinorAxis.SetValue(pEllipsoid->GetSemiMinorAxis(),ELLIPSOIDDP);
}
else
{
m_eSemiMajorAxis.SetWindowText("");
m_eSemiMinorAxis.SetWindowText("");
}
// Determine if LatLon
if (fabs(pEllipsoid->GetSemiMajorAxis() - LATLON_ID) < 0.001)
{
m_bLatLon = TRUE;
}
}
// Disable controls if latlon
m_eSemiMajorAxis.EnableWindow(!m_bLatLon);
m_eSemiMinorAxis.EnableWindow(!m_bLatLon);
m_eLatitudeOrigin.EnableWindow(!m_bLatLon);
m_eFalseEasting.EnableWindow(!m_bLatLon);
m_eFalseNorthing.EnableWindow(!m_bLatLon);
m_eScaleFactor.EnableWindow(!m_bLatLon);
m_eLongitudeOrigin.EnableWindow(!m_bLatLon);
m_bUpdate = TRUE;
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnOK()
{
if (m_bUpdate)
{
if (AfxMessageBox(BDString(IDS_NOTSAVED), MB_YESNO|MB_DEFBUTTON2) == IDNO)
{
return;
}
}
// Store coordinate display preference
CBDMain main;
BDMain(BDHandle(), &main, BDGETINIT);
main.m_bCoordAsLatLon = m_ckCoordAsLatLon.GetCheck();
BDMain(BDHandle(), &main, BDUPDATE);
BDGetSettings() = main;
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
void CDlgProjection::OnChange()
{
m_bUpdate = TRUE;
}
/////////////////////////////////////////////////////////////////////////////
//
// Set the default extent to the current view in the map
void CDlgProjection::OnSetExtent()
{
CRect rect;
CDocMap* pDocMap = BDGetDocMap();
if (pDocMap != NULL)
{
// Get Extent
CViewMap* pViewMap = pDocMap->GetViewMap();
pViewMap->GetClientRect(&rect);
double dMinX = pViewMap->GetfXInv(rect.left);
double dMaxX = pViewMap->GetfXInv(rect.right);
double dMinY = pViewMap->GetfYInv(rect.top);
double dMaxY = pViewMap->GetfYInv(rect.bottom);
if (m_bLatLon)
{
BDProjection()->TransMercatorToLatLon(dMinX, dMinY, &dMinY, &dMinX);
BDProjection()->TransMercatorToLatLon(dMaxX, dMaxY, &dMaxY, &dMaxX);
};
if (dMinY > dMaxY) swap(dMinY, dMaxY);
m_eMinEasting.SetValue(dMinX);
m_eMaxEasting.SetValue(dMaxX);
m_eMinNorthing.SetValue(dMinY);
m_eMaxNorthing.SetValue(dMaxY);
OnEdit();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -