地理坐标与屏幕坐标转换(VC++)
来源:互联网 发布:开淘宝店货源从哪里来 编辑:程序博客网 时间:2024/06/11 02:07
在底层GIS开发中,我们经常会碰到空间数据可视化问题,当我们拿到地理数据之后,我们该怎么把它展现在我们的计算机屏幕中呢,这或许是一个比较简单的问题。
我们知道,地理坐标系是我们用户自定义的坐标系,而显示在计算机屏幕上的坐标是基于屏幕坐标来绘制的,那么改如何转化呢?
首先,我们来熟悉几个概念:
地理坐标系,通常原点在左下角,X轴的方向是向右递增,Y轴的方向是向上递增。
屏幕坐标系,通常它的原点在左上角,X轴的方向向右递增,Y轴的方向是向下递增的。正好与地理坐标系相反。
第一种方法:
中心点配对法,将视图的中心和地理空间的中心点匹配,然后给定一个地理坐标根据该坐标和视野中心点的偏移和比例尺来进行计算就可以获得屏幕坐标,反之也是如此;
关于这种方法,可以参考其他的资料。
其实这种方法也很简单,像ArcGIS等GIS软件就是基于这种转换方式进行的。其代码如下:
地理坐标转屏幕坐标
OGRPoint ptCenter = GetMapCenter();//地图中心点POINT pt;pt.x = draw->m_ScreenWidth/2 + (long)((poPoint->getX()-ptCenter.getX())*draw->m_Scale+0.5);pt.y = draw->m_ScreenHeigh/2 - (long)((poPoint->getY()-ptCenter.getY())*draw->m_Scale+0.5);return pt;
屏幕坐标转地理坐标
OGRPoint ptCenter = GetMapCenter();//地图中心点POINT pt;pt.x = draw->m_ScreenWidth/2 + (long)((poPoint->getX()-ptCenter.getX())*draw->m_Scale+0.5);pt.y = draw->m_ScreenHeigh/2 - (long)((poPoint->getY()-ptCenter.getY())*draw->m_Scale+0.5);return pt;
下过如下图所示:
第二种方法:利用相似比(完整显示地图)
这幅图是网上的一副图片,我希望没有版权问题。
通常情况下,我们取X和Y方向比例因子较大的作为比例因子,即
double xScale = rect.Width()/width;//x方向的比例系数double yScale = rect.Height()/height;//y方向的比例系数double scale = max(xScale,yScale);
从而地理坐标转换为屏幕坐标的代码如下:
pts[index].x = (int)((poPoint->getX()-minx)*scale); pts[index].y = (int)(rect.Height()-(poPoint->getY()-miny)*scale);
在GDI设备描述表(device context,DC)包含了特定的显示设备的信息、图像的显示属性及特定的显示窗口等信息,用GDI编程的第一步必须获取当前的设备描述表的句柄(hDC),然后将该句柄作为参数调用GDI提供的API函数。我们在绘图时,通常是各个地理实体分别绘制,以线串为例:
//以下代码是根据直线的方法绘制for (int index = 0; index < numPoints - 1; index ++){dcMem.MoveTo(pts[index]);dcMem.LineTo(pts[index + 1]);}
这只是在这方面的初步探索,还有就是现实效率不高,当元素特别多时,就显得非常慢,在以后会逐步加入空间索引机制,加快图形搜索和显示效率,下面是运行结果的截图,
- 地理坐标与屏幕坐标转换(VC++)
- 地理坐标、经纬度坐标与屏幕坐标的转换!
- 地理(投影)坐标与屏幕坐标的转换公式
- 地理(投影)坐标与屏幕坐标的转换!
- 地理(投影)坐标与屏幕坐标的转换!
- 地理(投影)坐标与屏幕坐标的转换
- 地理(投影)坐标与屏幕坐标的转换!
- VC++中屏幕坐标与窗口坐标的转换
- 将三维地理坐标转换到二维屏幕坐标
- VC屏幕坐标与窗口坐标
- VC控件坐标与屏幕坐标
- 地图坐标与屏幕坐标的转换
- 屏幕坐标与客户坐标的转换
- 屏幕坐标与客户区坐标转换
- 世界坐标与屏幕坐标的转换
- 地理坐标转换
- 地理坐标与投影坐标
- 高斯克吕格与地理坐标相互转换算法(JS版本)
- 问题小结(7)-sd卡和/data分区使用情况检测
- dm9000AE调试记录
- zigbee学习笔记---通信例程之GenericApp
- Struts,Hibernate,Spring经典面试题
- EPF与Myeclipse 增强代码自动智能提示
- 地理坐标与屏幕坐标转换(VC++)
- 图形界面 时钟表盘
- ZIGBEE学习笔记五——读取温度电量信息
- 大话设计模式笔记----简单工厂模式
- ant 自动上传
- 跟我一起写 Makefile
- 恢复Joomla管理员密码
- poj 1517 u Calculate e
- 骗子改电脑配置信息兜售垃圾,怕上当进来学习一下