麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

VC++开发GIS系统(50)使用自定义平面坐标系

在上一篇文章《VC++开发GIS系统(49)屏幕坐标转换编码》中已经完成了MFC中的默认坐标和GIS系统中平面坐标的转换关系,本文介绍一下调用方法。

系统调用示例

在malagisView.h里增加一个记录当前屏幕信息的变量

public:
    malaScreen mScreen;

在malagisView.cpp里给变量初始化

CmalagisView::CmalagisView()
{
    // TODO:  在此处添加构造代码
    mBaseOper = NULL;
    //屏幕坐标初始化
    mScreen.lbx = 0.0;
    mScreen.lby = 0.0;
    mScreen.scale = 1.0;
}

这里只给左下角的坐标和初始比例尺做了初始化,还需要初始化屏幕的宽度和高度,这需要OnSize函数中初始化。切换到类视图,在CmalagisView上右击,选择属性。然后重写OnSize函数,如图:

在OnSize函数中添加下面代码

void CmalagisView::OnSize(UINT nType, int cx, int cy)
{
    CView::OnSize(nType, cx, cy);

    // TODO:  在此处添加消息处理程序代码
    mScreen.hScreen = cy;//Client窗口高度
    mScreen.wScreen = cx;//Client窗口宽度
}

测试当前坐标

在OnLButtonDown中增加下面的代码

void CmalagisView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值
    
    
    //===测试自定义平面坐标系===
    double nx = 0;
    double ny = 0;
    ScreenToCoord(point.x, point.y, mScreen, &nx, &ny);
    CString a;
    a.Format(L"%f", nx);
    CString b;
    b.Format(L"%f", ny);
    MessageBox(a +L" "+ b);
    //===测试自定义平面坐标系===
    
    malaPoint tmpPoint;
    tmpPoint.x = (double)point.x;
    tmpPoint.y = (double)point.y;
    if (mBaseOper)
    {
        mBaseOper->LButtonDown(nFlags, tmpPoint);
    }
    
    CView::OnLButtonDown(nFlags, point);
}

这段代码的作用是点击鼠标左键的时候弹出点击位置的平面坐标,效果如图:

麻辣GIS-Sailor
作者:
GIS爱好者,学GIS,更爱玩GIS。
微博关注
手机阅读
赞赏支持
手机阅读
微信捐助麻辣GIS
微信打赏
支付宝捐助麻辣GIS
支付宝打赏

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

3.如果本文对您有所帮助,请您对我们团队进行 打赏捐助让我们在传播3S的路上可以走得更远,不胜感激。PS:如果你是学生党,请优先把经费用于购买学习资料 以及 与小哥哥/小姐姐约会上:-)

如您有疑问,可在文末留言,或到麻辣GIS QQ群中提问。

QQ群(一):291616564 加入QQ群

QQ群(二):166408035 加入QQ群

QQ群(三):627853279 加入QQ群

QQ群(四):436386604 加入QQ群

QQ群(五):606176554 加入QQ群

QQ群(六):946178380 加入QQ群

QQ群(七):861271808 加入QQ群

新疆互助群:910717627 加入QQ群

微信公众号:malagis,扫描右边二维码直接关注。

发表评论