正轴等角割圆锥投影源程序的设计(MFC)



又进行了一次地图学实习,这次的实习题目是“正轴等角割圆锥投影源程序的设计”说句实话这个题目的前几问都是初高中的东西,只是让你用程序来实习便是(所以编程仅仅是个工具!)。不过最后一问关于坐标的转换问题,还是很有挑战性的,感觉不错,所以今天就共享一下,也晒晒我的一点体会,高手请直接忽视,菜鸟可以参考一下,或许能够对你有所启发。

题目描述:

圆锥投影,特别是正轴等角割圆锥投影,在我国以及一些中等纬度的国家应用得非常广泛。例如,编制中华人民共和国地图(南海诸岛作插图)以及各省(区)地图都是采用这种投影。新中国成立之前,我国地形图也是采用该投影作为数学基础的。可见,等角割圆锥投影可适用编制我国不同比例尺、不同类型的地图。

利用的公式:

(本人技术有限,公式无法显示,就用图片了......)

投影

制图区域:

河北省

纬度范围:北纬36° 到北纬43°

经度范围:东经112°到东经120°

制图区域中央经线:λ0=116000′

标准纬线:Ф1=37030′,Ф2=41000′

主比例尺:1:500万

经纬网密度:△Ф=△λ=10

题目要求:

1、编写正轴等角圆锥投影的源程序。在编制源程序时,采用通用程序为好,为此地球椭球的数据可采用IAG-1975椭球:a=6378140m,b=6356755m。

2、输出成果要求完整、整齐,有条件时可采用汉字化、表格化。输出成果包括:

  • U1,U2;
  • 投影常数:α
  • 积分常数:K
  • 长度比为最小的纬线纬度:φ0
  • 纬度:φ
  • 经度:λ
  • 直角坐标:X,Y

3、绘制该地图的经纬线网格。

下面是我的解决方案

(***这里是关键***)

STEP 1 用函数封装

这里所说的就是利用函数的思想来求解题目二中要求的各个参数,比如求K,我可以写一个GetK(参数1,参数2······);然后在主程序调用的时候直接传入参数即可解决,至于这个函数是怎么实现的,表问我,这是初中知识,如果不明白可以看下文的源程序!

STEP 2 MFC对话框设计

通过STEP 1是解决了算法的问题,但是我可以不喜欢一个黑乎乎的控制台界面,所以这里就设计了一个MFC界面,当然喜欢控制台的人可以跳过这步。界面如图

界面

STEP 3 绘图

绘图是个很关键的步骤,能够求出每个点的坐标并不是什么难事,但是要在界面里给用户反映出来就麻烦了(至少我这么认为),这里我对坐标原点进行了一定的迁移,画出的图更好看一些,具体实现请见源程序,效果如图效果

不足之处:

当然程序还是很不完善的,这里我列举两个:

1.窗口不能重绘

2.绘制的图片不能保存

当然这仅仅是很少的一部分不足,至于第一个原因,是我不爱动弹,最近事情比较多也就没有写,至于第二个原因,现在正在想办法解决,也欢迎高手给点指导。

需要源程序的,请点击这里,希望能够给你们参考,如果无法下载,请留下你的邮箱。希望跟大家多多交流,欢迎留言!谢谢。


作者  :  sailor

仅仅看明白了还不够,能把别人给讲明白了才算及格。


  1. cucca
    1#
    cucca

    这个解决了我的大问题丫,谢谢了。 :idea: :idea:

    April 17th, 2011 at 10:46 pm 回复
      1. sailor
        sailor

        不谢不谢

        April 28th, 2011 at 11:55 am 回复
  2. 那个窗口重绘的可以直接加一行代码,取消掉窗口重绘的属性,他就可以不用写窗口重绘啦 :mrgreen:

    June 25th, 2011 at 12:27 am 回复
      1. sailor
        sailor

        恩?这个没有听说,求指导!

        June 25th, 2011 at 12:42 am 回复
  3. 好吧,我说错了,不是一行代码,是两行代码,在CXXXXFrame::PreCreateWindow(CREATESTRUCT& cs)函数里面添加cs.lpszClass = AfxRegisterWndClass(0);
    在CXXXXView::PreCreateWindow(CREATESTRUCT& cs)函数里添加cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast(COLOR_WINDOW+1), NULL);就行了,虽然能实现,但是这样做并不太好,因为在把窗口拉到小于图像的话会擦除图像,所以还是建议。。。。写重绘吧!!!

    June 25th, 2011 at 01:09 am 回复
  4. Henry
    4#
    Henry

    您好!能否提供一下源程序?好像下载不了了……万分感谢啊!
    我的邮箱是bsgbsg2009@gmail.com

    November 5th, 2011 at 11:42 pm 回复
      1. sailor
        sailor

        已经发送!

        November 30th, 2011 at 02:36 pm 回复
  5. hello
    5#
    hello

    您好,源程序下载不了,您那里还有吗?麻烦发一份到:1440853392@qq.com感激不尽!!!!

    May 28th, 2012 at 04:53 pm 回复
      1. YQC
        YQC

        已发送~~多多交流

        May 29th, 2012 at 04:09 pm 回复
  6. 白水亮
    6#
    白水亮

    二哥,我白水亮,发份代码给我好吗?970243101@qq.com

    May 29th, 2012 at 03:26 pm 回复
      1. YQC
        YQC

        不要这么光明正大的暴露我身份~~~[face:han][face:han][face:han]

        May 29th, 2012 at 04:10 pm 回复
  7. wanwende
    7#
    wanwende

    能再传一次吗?下不了了。

    April 22nd, 2013 at 07:38 pm 回复
  8. cugxxz
    8#
    cugxxz

    二哥 我也是百度过来的。
    。。 源码可以下载。。。 好人一生平安~~~~~ 顺便ie6下有错位啊亲~

    May 21st, 2013 at 08:57 am 回复
  9. YQC
    9#
    YQC

    啊,世界真小。

    May 21st, 2013 at 11:10 pm 回复
  10. 轻狂书生
    10#
    轻狂书生

    图片看不了了

    May 9th, 2015 at 11:13 am 回复
  11. jvq
    11#
    jvq

    对比一下感觉我们当年学地图学的时候真够水的

    May 9th, 2016 at 10:24 pm 回复
  12. 王丫丫
    12#
    王丫丫

    您好!可以提供一下源程序吗?我好像下载不了了……非常非常感谢!!!
    我的邮箱是2315453806@qq.com

    June 11th, 2016 at 05:05 pm 回复
  13. 丫头
    13#
    丫头

    您好!可以提供一下源程序吗?我也下载不了了……非常感谢!!!
    我的邮箱是2290366140@qq.com

    November 16th, 2016 at 07:32 pm 回复


最新文章