PROJ.4学习——地图投影
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坐标系)。
PROJ.4学习——地图投影的更多相关文章
- PROJ.4学习——坐标系转换
PROJ.4学习——坐标系转换 前言 PROJ可以做任从最简单的投影到许多参考数据非常复杂的转换.PROJ最初是作为地图投影工具开发的,但随着时间的推移,它已经发展成为一个强大的通用坐标转换引擎,可以 ...
- PROJ.4学习——初识PROJ
PROJ.4介绍——初始认识 前言 PROJ是一个通用的坐标转换软件,它将地理空间坐标从一个坐标系转换为另一个坐标系.这包括地图投影和大地坐标变换. PROJ包含命令行应用程序,可以方便地从文本文件或 ...
- MATLAB地图工具箱学习总结(一)从地图投影说起
MATLAB地图工具箱学习总结(一)从地图投影说起 前言 本学期地图投影课上,李连营老师建议我们使用MATLAB完成每周的作业.从大二上学期开始接触MATLAB学习数学运算和地理数据处理的我,自然不会 ...
- D3学习之:D3.js中的12中地图投影方式
特别感谢:1.[张天旭]的D3API汉化说明.已被引用到官方站点: 2.[馒头华华]提供的ourd3js.com上提供的学习系列教程,让我们这些新人起码有了一个方向. 不得不说,学习国外的新技术真的是 ...
- Cocos_Code_Ide学习(一):理解Cocos Lua Project下的frameworks的proj.win32
第一次写,不知道有没有用,有不对的地方,接受大家的批评.勿喷,谢谢. 1.首先,创建工程 ------------------------------------------------------- ...
- (数据科学学习手札78)基于geopandas的空间数据分析——基础可视化
本文对应代码和数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 通过前面的文章,我们已经对geopanda ...
- MATLAB地图工具箱学习总结(四)自定义投影
MATLAB地图工具箱学习总结(四)自定义投影 这是本系列的最后一篇文章,准备给大家讲讲自定义投影怎么做.在做这项作业的时候,自己也是花了不少时间,将所有地图投影源文件都看了一遍,简单分析了一下源代码 ...
- MATLAB地图工具箱学习总结(三)地图工具箱的基本知识
MATLAB地图工具箱学习总结(三)地图工具箱的基本知识 今天想要介绍的是一些比较基础的函数.了解了这些函数,地图投影的基本概念才能真正明白.而要想继续研究MATLAB中有关地图投影的函数,尤其是未来 ...
- MATLAB地图工具箱学习总结(二)大圆和恒向线
MATLAB地图工具箱学习总结(二)大圆和恒向线 今天要和大家谈一谈大圆.恒向线航道的画法.还是先从案例开始说起,再分别介绍相关的函数. 1 作业案例:地图投影作 ...
随机推荐
- c# 设计模式(一) 工厂模式
源代码在github上面,需要的自己进行下载:https://github.com/yuzhoukamen/UnikmDesignPattern.git 工厂模式(Factory Pattern)是最 ...
- php项目命名规范
命名规范 ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范: 目录和文件 目录使用小写+下划线: 类库.函数文件统一以.php为后缀: 类的文件名均以命名空间定义,并 ...
- MySQL高性能优化规范建议,速度收藏
数据库命令规范 •所有数据库对象名称必须使用小写字母并用下划线分割•所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)•数据库对象的命名要能做到见 ...
- idea提交git报错Push rejected: Push to origin/master was rejected
参考https://blog.csdn.net/u012934325/article/details/71023241
- speech
1.李开复:一个人的成功,15%靠专业知识,其余15%人际沟通,公众演讲,以及影响他人的能力 2.演讲是一门遗憾的艺术 3.没有准备就等于准备失败 4.追求完美,就是在追求完蛋 5.宁可千日无机会,不 ...
- 基于卷积神经网络CNN的电影推荐系统
本项目使用文本卷积神经网络,并使用MovieLens数据集完成电影推荐的任务. 推荐系统在日常的网络应用中无处不在,比如网上购物.网上买书.新闻app.社交网络.音乐网站.电影网站等等等等,有人的地方 ...
- 微信小程序http连接访问解决方案
HTTP + 加密 + 认证 + 完整性保护 = HTTPS,小程序考虑到信息安全的问题,选用了更为稳定安全的https 来进行信息传递. HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全 ...
- C语言学习——bsmap-2.74_main.cpp
素材路径:https://www.codeforge.cn/read/428275/bsmap-2.74-_-main.cpp__html 1.C/C++预处理指令,常见的预处理指令如下: #空指令, ...
- intelliJ idea常用快捷键 mac版
目录 coding project coding Command + P 显示方法参数信息 Command + N 自动生成getter.setter.hashCode.equals.toString ...
- python中的mysql数据库like模糊查询
%在python中是个特殊的符号,如%s,%d分别代表了字符串占位符和数字占位符. 大家知道,mysql的模糊查询也需要用到%. 所以,可以先把需要查的字符串抽出来,再以参数方式传入. args = ...