热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

椭球体上某区域面积的求算,及该区域兰伯特投影与墨卡托投影到二维平面后面积对比

hello,最近yogurt给大家的更新很频繁哦~~今天要分享的内容是紧接着前面两篇的内容做的扩展~~我们不仅要求取某地区在地球椭球体这个三维空间中的面积,还要与该地区投影到二维空间

    hello,最近yogurt给大家的更新很频繁哦~~今天要分享的内容是紧接着前面两篇的内容做的扩展~~

    我们不仅要求取某地区在地球椭球体这个三维空间中的面积,还要与该地区投影到二维空间后平面多边形的面积进行对比。怎么求取二维平面多边形的面积,大家可以看看我之前写过的《求解多边形面积2S= Σ【Xi (Yi+1-Yi-1)】,(i属于1~n),公式解析及编程实现》http://www.cnblogs.com/to-sunshine/p/7642222.html。至于怎么进行兰伯特投影墨卡托投影,大家可以参考我之前写过的《.gen地图文件的投影编程实现(以墨卡托投影和兰伯特投影为例)》http://www.cnblogs.com/to-sunshine/p/6048438.html。

============================yogurt小课堂开课了===========================

    下面yogurt要跟大家分享这次需要用到的知识点:

    地球椭球体表面上的梯形面积:

    取长度很小很小的一个长和一个宽,组成的梯形是非常小的,近似可以看作矩形。那么 S = 长 X 宽 ,如下图:

(图来自我老师的PPT)

        我们知道 AB = CD ,是南北方向上的边长,假设与任意一条经线平行。由上节的知识,我们不难知道: AB = CD = M X dφ (dφ是AD所在纬线与BC所在纬线的纬度间隔,很小);

    同样,由于纬度间隔非常小,可以近似看作 BC ≈ AD ,是东西方向上的边长,假设与任意一条纬线平行。由上节的知识,我们也不难知道: BC ≈ AD = r X dλ (dλ是AB所在经线与CD所在经线的经度间隔,很小),而 r = N X cosφ(φ看作AD所在纬线或者BC所在纬线的纬度,由于间隔很小,所以只要所有梯形统一用上边的或者统一都用下边的纬度即可)。因此,BC = AD = N X cosφ X dλ 。

    综上,便能够得到地球椭球体上梯形的面积 dS = (M X dφ) X (N X cosφ X dλ)= M N cosφ dλ dφ ,那么 S = 

    对于每一个小梯形,用前后两个点的平均纬度作为 φ2,以该区域的最低纬度作为 φ1,dφ = φ2 - φ1 ;前后两个点的经度对应 λ1、λ2,再利用积分的原理就可以计算得到椭球体上的某区域的面积啦!

=================================下课了================================

    假设我们拿到的数据是某区域墨卡托投影后的二维平面上一系列的区域边界点数据,那么我接下来的步骤将分为六步:1、计算二维平面上的墨卡托投影后的平面面积 S1  -->  2、墨卡托投影反算,得到每个点在地球椭球体上对应的经纬度坐标  -->  3、计算地球椭球体上该区域的面积 S2 --> 4、把该区域进行兰伯特投影得到二维平面上又一系列的区域边界点数据  -->  5、计算二维平面上的兰伯特投影后的平面面积 S3 -->  6、对比三种面积的区别。

     

1、计算二维平面上的墨卡托投影后的平面面积 S1

程序如下:

 

 

2、墨卡托投影反算,得到每个点在地球椭球体上对应的经纬度坐标

    先利用墨卡托投影反解公式,计算B、L,其中对于求解 L 需要用到 K ,K 的值由公式求出;对于求解 B,则需要设定一个初始值,然后进行迭代求解,直到前后两次计算出的 B 之差小于0.00000000001,则认为后一次计算的 B 的值为最终解。

程序如下:

 

 

在ArcGIS中查看墨卡托反算前后的数据,对比显示如下:

                 反算前                                    反算后

 

3、计算地球椭球体上该区域的面积 S2

    因为ds足够小,所以把梯形近似看做一个矩形来计算,矩形的长为东西方向的弧长,宽为南北方向的弧长。根据弧长计算公式:弧长=半径*弧度,涉及到子午圈曲率半径M和主法截面曲率半径N的计算公式。通过查阅资料,可知:

南北方向上的弧长d=M*d;东西方向上的弧长d=N*d

    对于每一个小梯形,用前后两个点的平均纬度作为 φ2,以该区域的最低纬度作为 φ1,前后两个点的经度对应 λ1、λ2,再利用积分的原理来计算得到椭球体上的该区域面积。

程序如下:

先声明和赋值程序中将会用到的基本数据长半轴a、第一偏心率e、基准纬度(江苏省最低纬度)B;并通过指向矢量文件的指针获得前后两点的纬度B1、B2和经度L1、L2。用TB来代替2-1,用AB来代替(1+2)/2:

计算小梯形的面积积分公式所需要用到的参数K、A、B、C、D,带入公式进行计算面积:

 

4、把该区域进行兰伯特投影得到二维平面上又一系列的区域边界点数据

这里参考《.gen地图文件的投影编程实现(以墨卡托投影和兰伯特投影为例)》http://www.cnblogs.com/to-sunshine/p/6048438.html。

 

5、计算二维平面上的兰伯特投影后的平面面积 S3

方法同第一步,只是带入的数据不同。

 

6、对比三种面积的区别

整个程序主函数如下:

运行后结果如下:

可见,进行Albers等积投影之后,矢量面的面积变化误差相比之整体面积来说较小,所以视为等积投影是成功的。

 


推荐阅读
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
author-avatar
赵乙潘_107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有