VC++开发GIS系统(49)屏幕坐标转换编码
发布时间: 2015-12-17
所属分类: VC++开发GIS系统
在前一篇文章《VC++开发GIS系统(48)屏幕坐标转换原理》中我介绍了关于MFC中的默认坐标和GIS系统中平面坐标的关系,并且推导了转换公式,如下:
MFC坐标转换自定义笛卡尔坐标
a1 = lbx + a*s
b1 = lby + (h - b)*s
自定义笛卡尔坐标转换MFC坐标
a = (a1 - lbx)/s
b = h - (b1 - lby)/s
本文中将在系统中编码实现这个转换。
新建malaScreen的结构体
在文章《VC++开发GIS系统(33)基本GIS系统中点单元的结构体》中我创建了点的结构体,同样这里需要新增一个记录屏幕的结构体,用于记录在文章《VC++开发GIS系统(48)屏幕坐标转换原理》中介绍的关于屏幕转换的参数。代码如下:
//屏幕坐标系
typedef struct
{
double scale; //比例尺
double lbx; //屏幕左下角的横坐标
double lby; //屏幕左下角的纵坐标
int wScreen; //屏幕宽
int hScreen; //屏幕高
}malaScreen;
坐标转换函数实现
坐标转换属于基础的操作,所以将代码写在了malaBase这个模块中。代码如下:
_malaBase.h
/*
* 屏幕坐标转换函数
*/
void malabasedll ScreenToCoord(long inX,long inY,malaScreen pScreen,double *outX,double *outY);//屏幕坐标系转换为平面坐标系
void malabasedll CoordToScreen(double inX, double inY, malaScreen pScreen, long *outX, long *outY);//平面坐标系转换为屏幕坐标系
_malaBase.cpp
//屏幕坐标系转换为平面坐标系
void malabasedll ScreenToCoord(long inX, long inY, malaScreen pScreen, double *outX, double *outY)
{
*outX = pScreen.lbx + inX*pScreen.scale;
*outY = pScreen.lby + (pScreen.hScreen - inY)*pScreen.scale;
}
//平面坐标系转换为屏幕坐标系
void malabasedll CoordToScreen(double inX, double inY, malaScreen pScreen, long *outX, long *outY)
{
*outX = (long)(inX - pScreen.lbx) / pScreen.scale;
*outY = pScreen.hScreen - (long)(inY - pScreen.lby) / pScreen.scale;
}
相关阅读
声明
1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。
2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。
手机阅读
公众号关注
知识星球
手机阅读
最新GIS干货
私享圈子