PROJ.4学习——地图投影(坐标系投影)

前言

  PROJ是由大量的基础投影库构成。这里主要讨论学习PROJ库的相关参数。

  这里大部分是讲如何将3D坐标系投影到2D平面上。投影时,涉及到基准线,单位,比例英子,偏移量,轴转换等。

  很多实际操作中却涉及到3D坐标系转换为其他3D坐标系(下一篇更新)。

参数列表

  下面是可以应用于大多数坐标系定义的PROJ参数列表。此表不尝试描述特定于特定投影类型的参数。

参数 描述
 +a  椭球体长半轴长度
 +axis  轴防线
 +b  椭球体短半轴长度
 +ellps  椭球体名称,在cmd中输入:proj -le 查看支持哪些椭球体
 +k  比例系数(比例因子),旧版本,不赞成使用
 +k_0  比例系数(比例因子)
 +lat_0  维度起点
 +lon_0  中央经线
 +lon_wrap  中央经线的包装参数(详见下面的说明)
 +no_defs

不要使用proj库中的缺省定义文件。

在linux中路径为:/usr/share/proj/proj_def.dat

windows中为安装路径下的:E:\SvnWorkspace\LY_WEB_GIS\branches\Documents\ms4w-mapserver-for-wimdows\release-1911-x64-gdal-2-3-3-mapserver-7-2-1\bin\proj\SHARE\proj_def.dat

标红处是我安装MapServer是自带安装Proj的路径

 +over  允许经度输出在-180到180范围之外,禁用wrapping(详见下面的说明)
 +pm  备用本初子午线(通常是一个城市名称,见下文)
 +proj  投影名称,在cmd中输入:proj -l 查看数据支持
 +units  水平单位,meters(米)、 US survey feet, etc(英尺等 us-ft).
 +vunits  垂直单位
 +x_0  东(伪)偏移量
 +y_0  北(伪)偏移量

units

  可以使用+units关键字指定水平单位,该关键字具有单位的符号名称(如:+units=us-ft)。另外换算单位米可以用+to_meter关键字(如:美国一英尺为0.304800609601219米)。

  在cmd中输入:  cs2cs -lu 或者 proj -lu 查看PROJ支持的单位。

  

  

  下面来了解一下 +to_meter 关键字的使用

#在cmd中输入:cs2cs +proj=merc +lat_ts=56.5 +ellps=GRS80 +to +proj=utm +zone=32 +units=km#再输入参数
1699741.9       376042.8#得到
2594.43 715.50 0.00

#在cmd中输入:cs2cs +proj=merc +lat_ts=56.5 +ellps=GRS80 +to_meter=0.5 +to +proj=utm +zone=32 +units=km#再输入参数3399483.80      752085.60#得到2594.43 715.50 0.00

 

  从两个命令比较,第二个增加了 +to_meter=0.5

  第二个参数范围是第一个的两倍

  但是投影出来的位置却是同一个

  因为第二个在投影转换是,将1米转换为了0.5倍,即范围缩小了一半

  所以得到的结果是一样的

  同样,垂直单位可以使用 +vunits 关键字。如果没有指定垂直单位,则垂直单位将默认与水平坐标相同。

  注意:proj根本不处理垂直单元,因此+vto_meter参数将被忽略。

  可以通过应用+k_0参数来缩放输出单元。返回的坐标(经纬度、米、千米等,按照定义的 +units 输出)按使用+k_0参数分配的值进行缩放。

#tmerc 横墨卡托高斯投影proj +proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs#输入12.2 -58.5#得到3664306.25      -8536230.41

 东北(伪)偏移量

  几乎所有的坐标系都允许存在一个假的东偏移 (+x_0)和一个假的北偏移 (+y_0)。请注意,这些值总是以米表示,即使坐标系是其他一些单位。有些坐标系(如UTM)具有隐式的假东向和北向值。

 经度覆盖/边界设置(Longitude Wrapping)

  我把Wrap翻译为覆盖或边界,也不知道准确与否。

  默认情况下,PROJ将输出经度覆盖/边界值在-180到180之间。可以使用+over开关禁用在pj_inv()中较低级别执行的默认覆盖/边界。这对于等距圆柱投影特别有用,在等距圆柱投影中,X值经过-20000000(大致)后继续经过-180,而不是覆盖/边界到+180。

  可以使用+lon_wrap选项在pj_transform()中提供一种进行经度边界设置的替代方法。此选项的参数是一个中心经度。所以+lon_wrap=180表示在0到360范围内的经度。注意+over不会禁用+lon_wrap。

本初子午线Prime Meridian

  本初子午线的定义是基于格林尼治的本初子午线与当前坐标系统本初子午线之间的偏移量定义的(格林尼治的本初子午线是基准,设置 +pm=经度偏移量 表示当前坐标系统的本初子午线;或者是一个符号名称)。

  如:EPSG:27500,它的本初子午线就是基于格林尼治的本初子午线加上西偏2.337208333333333构成

# ATF (Paris) / Nord de Guerre
<27500> +proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs  <>

  再如:EPSG:27395,它的本初子午线就是一个符号定义

# NGO 1948 (Oslo) / NGO zone V
<27395> +proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs  <>

  当前子午线声明只被pj_transform() API利用,而不被pj_inv()和pj_fwd()利用。因此用户工具cs2cs遵守本初子午线参数,但是proj程序忽略它.

  在cmd中输入:cs2cs -lm 查询支持的本初子午线

  

  比如,使用的例子。在格林尼治基于lat/long坐标的位置long=0, lat=0被转换为以马德里为本初子午线的lat/long坐标。

#在cmd中输入:
cs2cs +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 +pm=madrid
#输入参数
0 0
#得到3d41'16.58"E    0dN 0.000

轴方向切换

  从PROJ 4.8.0开始,+axis参数可用于控制坐标系的轴向。默认的方向是“向东,向北,向上”,但是方向可以翻转,或者使用+axis开关中的轴的组合来翻转轴。值分别是:

  • "e" - Easting
  • "w" - Westing
  • "n" - Northing
  • "s" - Southing
  • "u" - Up
  • "d" - Down

  其组合格式如下:

  • +axis=enu easting,northing,up - 默认值。
  • +axis=neu northing,easting, up - 适用于“lat/long”地理坐标,或向南横向墨卡托。
  • +axis=wnu westing,northing,up - 有些具有“西正”坐标的行星坐标系。

  注意 +axis不适用与 proj 命令,只适用于 cs2cs 命令(3D投影到2D上面是不行的,只能是3D坐标系转其他3D坐标系)。

转载于:https://www.cnblogs.com/eshinex/p/10299947.html

PROJ.4学习——地图投影相关推荐

  1. python 通过tif文件生成经度和纬度的二维矩阵

    tif文件中不会保存经度和纬度矩阵数据,如果要用到经度和纬度矩阵可以通过下面的代码生成经纬度矩阵 import numpy as np from osgeo import gdaltif_Path = ...

  2. WRF安装和运行的技术教程

    声明1 本教程完全免费,请勿进行商业化 声明2 时间仓促,如果有错误或不足之处,欢迎批评指正 快速导航 1. WRF的安装 1.1 检验和安装基础包 1.2 WRF安装的目录结构 1.3 测试编译器, ...

  3. Linux地图投影Proj4应用,Proj.4简介与使用

    Proj.4是开源GIS最著名的地图投影库,许多GIS开源软件的投影都直接使用Proj.4的库文件.该项目遵循MIT license,用C语言编写,由USGS的Gerald I. Evenden在19 ...

  4. Proj.NET-地球椭球体、大地基准面及地图投影

    地球椭球体(Ellipsoid) 众所周知我们的地球表面是一个凸凹不平的表面,而对于地球测量而言,地表是一个无法用数学公式表达的曲面,这样的曲面不能作为测量和制图的基准面.假想一个扁率极小的椭圆,绕大 ...

  5. 从源码学习Transformer!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 Transformer总体结构 近几 ...

  6. 学习笔记:数据分析和处理(ML计算模型前的预处理)——持续更新

    数据分析和处理,其实就是你计算模型前的预处理步骤.一个不合理的错误数据如果不在预处理的时候剔除,可能会对最终结果造成非常大的影响. 在很多时候,如果你换了能换的所有模型和参数,最后计算得到的模型的交叉 ...

  7. 【Java学习】从一个简单的HelloWorld项目中入门maven

    创建一个maven项目 这里推荐官方文档:maven官方文档 [注]此篇文章也是笔者学习笔记,如有错误,请见谅. [注]我把Goal翻译成命令.比如Plugin Goal: ps:我他喵的写了一大半的 ...

  8. 一句话总结等距映射(流形学习)

    一句话总结等距映射(流形学习) 核心:将样本投影到低维空间之后依然保持相对距离关系. 等距映射使用了微分几何中测地线的思想,它希望数据在向低维空间映射之后能够保持流形上的测地线距离.所谓测地线,就是在 ...

  9. 用Python做地图投影 - 多面孔的世界

    (如需转载,请在显著位置注明个人微信公众号stdrei) 为什么要做地图投影 简而言之,地球表面是一个三维的曲面,在曲面上进行测量是非常困难的.不信你拿个地球仪量一下两点的距离或者计算个夹角试试.将三 ...

最新文章

  1. Selenium 2.0的由来及设计架构(三)
  2. 今日看点:“靠脸进站”的刷脸系统究竟是如何实现的
  3. Linux netstat命令介绍
  4. 编译原理lr(0)c语言,关于编译原理:LR(1)LR(0)文法判断?
  5. cocos2d-x 2.2.3 win32程序发布注意
  6. 代码主题darcula_Pycharm最舒服的主题风格
  7. 10分钟带你光速入门运维工具之-Puppet
  8. 数学分析 函数的连续性(第4章)
  9. Mac OSX 下破解软件的一般方法及过程、 mark一下
  10. Android 通过bmob十分钟实现即时通讯
  11. c语言中begin用法,C++ deque cbegin()用法及代码示例
  12. 安卓统一推送联盟成立!不卡顿的安卓系统终于来了!
  13. Qt 添加 QtNetwork 库文件(包括vs中和qt中)
  14. 最小二乘法在编程中的实现
  15. [C8MIm]SbF6离子液体379712-23-9/1-辛基-3-甲基咪唑六氟锑酸盐的分子量:431.0748392对吗?
  16. PHP 删除COOKIE 方法
  17. Elasticsearch构建商品搜索系统
  18. 使用 Python 进行网页抓取
  19. iebook2010+绿色破解版的解压密码
  20. P6软件如何设置权重体系

热门文章

  1. Llinux文件操作四剑客
  2. 剑指offer面试题[10]-二进制中1的个数
  3. 搭建第一个Docker
  4. matlab虚拟现实之V-Realm Builder2中viewpoint节点的使用
  5. python学习基础语法_python学习-基础语法
  6. java exec dir的例子_java.lang.Runtime.exec(String[] cmdarray, String[] envp, File dir)方法实例...
  7. java里的stream,Java中的Stream
  8. 坡度土方计算案例_【攻略】如何解锁方格网法土方计算?
  9. 23.1解析函数的级数表示(二)
  10. springboot 配置全局响应数据_spring boot 全局事务配置