地图比例尺绘制

运行效果图

地图比例尺是地图当中不可缺少的元素。在地理信息系统软件的设计与开发过程中,如何绘制地图比例尺是一个需要认真解决的问题。在解决过程中有如下几个问题需要提出:

1、采用什么工具?

2、不同类型的地图比例尺如何分别绘制?

3、如何控制地图比例尺的绘制精度?

前面两个问题好解决。在VC中采用GDI即可完成各种图形的绘制,而通过研究不同类型的比例尺的特点,咱们完全可以通过GDI函数完成这些比例尺图形的绘制。

咱们来详细探讨如何控制地图比例尺的绘制精度。所谓控制地图比例尺的绘制精度,就是说屏幕上显示的长度和实际代表的空间距离的比例应该和显示出来的数字相符合,不然,咱们所绘制的比例尺就失去了意义。要做到这一点,我们有必要先了解一下坐标映射。

我们现在要接触两种坐标,一种是设备坐标,另一种则是逻辑坐标。设备坐标是针对计算机输出设备而言的,比如显示器上的坐标,打印机上的坐标,在一般的情况之下进行绘图操作都是以像素作为绘图单位。逻辑坐标可以理解为咱们地图上的实际坐标,其单位可能是米或者分米等。

这种情况要求我们有一个设备坐标到逻辑坐标的对应关系,这就是坐标映射。WINDOWS提供了几种映射方式,可以实现对应的逻辑坐标系。例如,MM_TEXT方式下,设备坐标系的坐标原点位于屏幕的左上角,X轴和Y轴的正方向分别指向我们面对屏幕的右方和下方,它的绘图单位是像素;MM_LOMETRIC方式下,绘图单位是0.1毫米,坐标原点位于屏幕的左上角,X轴和Y轴正方向分别指向面对屏幕的右方和上方。我们在地图比例尺的绘制过程中会选择MM_LOMETRIC方式,道理很简单,它和我们实际使用的地图坐标系很相似,它们的坐标单位只是数量级的差别,转换是很方便的。

注:关于这方面的内容,大家可以参考一下刘先生发表的一篇文章《VC6.0映射模式转换及如何消除坐标误差》,但这篇文章结尾所提供的方案不可取,大家可以改进改进!

为了方便比例尺的绘制,咱们首先定义Scale类。另外还定义一个枚举类型,用于列举比例尺的类型。

enum FGScaleType
{
  ST_SINGLELINE,
  ST_SINGLELINE2,
  ST_SINGLELINE3,
  ST_FILLRECT,
  ST_FILLRECT2,
  ST_STEPPEDLINE,
  ST_LINERECT
};
class CFGScaleDraw
{
  ......
  FGScaleType m_ScaleType;
  float m_fScale;
  int m_nMinX, m_nMaxX, m_nMinY, m_nMaxY;
public:
  void SetScaleType(int type);
  void SetScale(float scale);
  void SetRect(CRect rect);
  void SetRect(int minx, int miny, int maxx, int maxy);
  void DrawScale(CDC* pdc);
};

其中,m_fScale是比例尺分母,例如1:10000的比例尺,m_fScale = 10000;m_nMinX, m_nMaxX, m_nMinY, m_nMaxY控制地图比例尺绘制的范围;DrawScale用于比例尺输出。

咱们重点来看看DrawScale是如何实现的。首先咱们用SetMapMode来完成映射模式的转换。由于咱们要绘制的比例尺在X方向是充满整个绘制范围的,因此绘制范围在屏幕上的显示大小(ds)与实际代表的空间距离(DS)之比便是比例尺大小1/m_fScale,即:1/m_fScale = ds / DS;

时间: 2024-10-02 23:07:07

地图比例尺绘制的相关文章

PS绘制逼真的眼睛教程

  绘制眼睛之前需要对眼睛的构造有深刻的了解.然后画出草图,分层或分组把每一部分都单独画出来,再逐步刻画细节即可. 最终效果 1.首先先建立一个图层,每个图层各自承载不同的部分,避免绘画过程中出现问题导致无法修改. 1.先画出眼睛的大致轮廓.这个步骤不用刻画得太详细,只要大致外形捉准就好!小编这里是用数位板勾勒外形的,熟悉PS的朋友可以用PS里面的钢笔工具,设置好画笔的像素和颜色,再使用路径面板的描边功能. 2.主要是用PS的画笔工具绘制色块,然后用钢笔工具选择需要处理的区域,按住Ctrl+En

PS 15分钟快速绘制一个快播图标

  今天的教程@无梦不欢001 教大家绘制一个精美的快播图标,教程不难,主要是图层样式的运用,熟练的话15分钟就可以搞定.源文件已附上方便学习,来收! 分类: PS入门教程 ps图标制作教程

PS绘制一个太空中发光的行星教程

photoshop教程中我将为大家介绍如何轻松地使用photoshop中的云彩滤镜和扭曲滤镜制作一颗炫酷的行星.最终效果如图所示 1.创建一个新图片,大小为940*700,背景填充黑色,新建一个图层,使用套索工具(羽化50px)绘制一个椭圆选区,然后执行"滤镜-渲染-云彩",如图所示 2.按下Ctrl+L打开色阶调整框,应用下图所示的设置. 3.执行"滤镜-扭曲-旋转扭曲",如图所示 photoshop教程 4.设置角度为999,如图所示 分类: PS入门教程

控件-mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了

问题描述 mscomm串口波形绘制范例,求大神解析这三个函数,急急急,绘制波形图的原理是什么,拜托了 //串口void CPort_testDlg::OnComm() { //if(stop)return; VARIANT m_input1; COleSafeArray m_input2; long lengthi; BYTE data[600]; CString str; int ai=0bi=0ci=0di=0; int sum=0; if(m_Comm.GetCommEvent()==2)

Photoshop鼠绘教程:绘制纯美的天使画面

本教程虽然是描写梦幻的天堂.不过很多元素都是我们所见过的,如鸽子,百合花等.而且数量还很多,刻画的时候可能要花费一定的时间.绘画的时候尽量保持画面干净,这样才能更好的突出天使的纯美.最终效果 1.用SAI起线稿,新建一个A4大小300分辨率的纸.我想画一个忧郁的天使,本来是应该画开朗的表情,但我却画成忧郁,是因为这个女孩在生前有一个悲伤的故事.而鸽子是和平的象征,百合是清纯的象征,我希望这些通过画面表现出一种力量,一种对比,一种感情中的华美. 在绘制草图时尽量不要让自己过早地进入到细节,可以先放

Flash设计绘制具有卡通风格的石头和山脉实例教程

  绘制卡通石头在用Flash制作卡通动画与MTV时,石头也是经常出现的,本实例就教大家如何绘制石头.实例效果如图6-1所示. 图6-1 最终效果图 制作时间:5分钟 学习难度:★★☆☆☆ 核心技术:了解绘制Flash石头时的几种画法;使用[钢笔工具].[部分选取工具]绘制石头形状. 理论浅谈:Flash石头的几种画法. 1.Flash石头时的几种画法 大自然中很多地方都能找到石头,不同的石头在颜色.形状.大小.花纹.粗滑等方面具有不同的特点.在美术国画基础中,一般石头的画法有几种,比如石头的勾

Skia深入分析5——skia文字绘制的实现

文字绘制主要包括编码转换(主要是中文).字形解析(点线或image)和实际渲染三个步骤.在这个过程中,字形解析和实际渲染均是耗时步骤.Skia对文字解析的结果做了一套缓存机制.在中文字较多,使用多种字体,绘制的样式(粗/斜体)有变化时,这个缓存会变得很大,因此Skia文字缓存做了内存上的限制. 1.SkPaint 文字绘制与SkPaint的属性相关很大,先回头看下SkPaint相关的属性 class SkPaint { private SkTypeface* fTypeface;//字体 SkP

js压缩工具1.0界面绘制

使用的是MFC,建立工程之后需要美化界面,因为在第一个版本中没想加入太多的内容,所以界面比较简单. 创建MFC的document工程 按照以下格式绘制页面,工具都在右边的工具栏上   然后使用skin++对其进行美化,skin++很好的使用了装饰器模式,在原来的构件的基础之上重新绘制画面,并且可以显示出各种风格 到网上下一个skin++的源码包 将SkinPlusPlusDLL.dll SkinPlusPlus.h SkinPlusPlusDLL.lib 拷贝到工程目录下 将自带的几个Minim

WPS2016数学交集图怎么绘制

  1.打开需要绘制交集图的文档 2.点击工具栏的"插入",然后我们要先插入"形状"绘制2个圆形图案. 3.绘制好2个图案后选中图案,然后点击"形状填充"然后选择"无填充颜色" 4.然后我们就会发现我们需要的数学交集图制作绘制完成了.