pyproj

关注
义项:Python 投影转换库
pyproj

pyproj是PROJ制图投影与坐标转换库的Python接口,用Cython封装PROJ的C/C++函数,在Python环境中完成地理坐标与地图投影坐标之间的相互换算。它支持以numpy数组、Python列表或标量形式输入坐标,并可借助EPSG等权威编码直接调用预定义的坐标参考系。该库由杰弗里·惠特克(Jeffrey Whitaker)于2006年创建,以MIT许可证发布,是地理信息系统、气象与遥感数据处理中常用的坐标转换工具。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

pyproj是一个把PROJ库的功能引入Python的接口模块,其定位是PROJ制图投影与坐标转换库的Python绑定[1]。PROJ本身用C/C++编写,负责实现各类地图投影算法并携带坐标参考系数据库;pyproj通过Cython把这套底层能力包装成Python可调用的对象与函数。

在功能范围上,pyproj可以在大地坐标(经度、纬度)与地图投影平面坐标(x、y)之间双向转换,也能让一个投影坐标系的坐标直接换算到另一个投影坐标系。坐标输入形式比较灵活,numpy数组、Python数组、列表、元组和标量都被接受,其中对numpy数组做了针对性优化[2]。除投影转换外,它还提供大地测量计算能力,例如依据起点经纬度、方位角与距离推算终点的经纬度与反方位角,或由两点经纬度求出距离与正反方位角[3]。

原理

pyproj自身并不重写投影公式,而是调用PROJ提供的运算函数。核心类Proj在实例化时接收一组投影控制参数,这些参数可以写成字典、关键字参数,也可以写成与PROJ命令行兼容的PROJ字符串[4]。以参数proj='utm'、zone=10、ellps='WGS84'初始化后,用经度和纬度调用该实例即可得到以米为单位的平面坐标;传入参数inverse=True则执行反向换算[5]。

从数学上看,地图投影是建立椭球面坐标与平面坐标之间的映射。设点的纬度、经度为$\varphi$、$\lambda$,投影正算给出平面坐标$(x,y)=f(\varphi,\lambda)$,反算则求$f^{-1}$[6]。由于椭球体无法在不产生形变的前提下展开成平面,不同投影在角度、面积或距离上各有取舍,pyproj与PROJ做的正是把选定的投影方案按参数落实为具体计算[6]。

现代pyproj还围绕坐标参考系(CRS)组织功能。CRS由基准面、坐标系统与投影共同描述,模块用CRS类表示它,用Transformer类表示一次坐标操作,而转换网格用于提高不同基准面之间的换算精度[6]。调用时可用always_xy=True统一经纬度轴序,避免坐标顺序与软件预期不一致[7]。

发展历程

该项目的版权信息显示,早期代码由杰弗里·惠特克于2006年开发,2019年之后由开源贡献者继续维护[8]。项目的元数据同样把惠特克列为作者,维护者则记为pyproj贡献者群体,软件以MIT许可证发布[9]。

2020年11月,pyproj发布3.0.0版本,随后修订版3.0.0.post1于同月5日发布[10]。3.0系列提高了对PROJ版本的要求,不再把转换网格打包进wheel文件,用户需要按需获取网格数据。此后版本持续迭代,发行记录显示3.7.1、3.7.2等版本陆续推出,稳定文档要求的最低PROJ版本为9.4、最低Python版本为3.11。

项目通过多个渠道分发。除源码包外,官方还为不同操作系统与处理器架构提供预编译wheel文件,覆盖Windows、macOS与多种Linux的多个Python版本[1]。各Linux发行版也把它收录为软件包,例如Debian中的包名为python3-pyproj。

应用

坐标转换是pyproj最直接的用途。当表格数据中只有经纬度、缺少投影坐标时,可以用它把地理坐标换算成投影坐标,再导入地图软件与其他空间数据对齐[7]。典型代码由Transformer.from_crs()按源与目标坐标系的EPSG编码构造转换器,再对成组的经纬度逐一调用transform()完成换算[7]。

在更大范围的地理信息处理流程中,pyproj常作为底层依赖被调用。它实现了OGC与ISO发布的相关规范所要求的坐标参考系描述方式,包括Well-Known Text与URN标识方案,因此可以被需要读写这些格式的程序直接复用[6]。批次处理方面,由于接口对numpy数组做了优化,一次传入整组坐标比逐点循环调用更为高效[2]。

局限

pyproj的能力边界由PROJ决定,它本身不实现投影算法,PROJ的版本与所带数据直接约束可用功能。项目文档要求最低PROJ版本为9.4,较旧的PROJ无法支撑新版本的pyproj。此外,3.0版本之后的wheel不再内嵌转换网格,缺少网格时部分基准面之间的转换精度会下降,需要使用者另行配置数据。

坐标轴顺序是常见的出错来源。许多地理坐标参考系把纬度放在前面、经度放在后面,而不少软件习惯按x、y即经度、纬度的顺序处理数据,两者不一致时结果会明显偏离[6]。同样地,坐标参考系都有其适用区域,超出该区域使用会导致投影畸变过大或转换结果不准[6]。

转换的合法性也并非总是由异常暴露。在默认设置下,若坐标转换无效,接口不会抛出异常,而是返回一个约定的无效值;只有显式开启错误检查才会得到异常提示[11]。这意味着调用方需要自行判断返回值是否有效,否则无效结果可能被静默带入后续计算[11]。

参见

  • PROJ —— pyproj 所封装的底层制图投影与坐标转换库,负责实现投影算法并提供坐标参考系数据库。

  • 坐标参考系 —— 描述坐标如何对应地球表面位置的完整定义,是 pyproj 组织转换操作的基本单位。

  • 地图投影 —— 把椭球面上的经纬度映射为平面坐标的数学方法,pyproj 的转换建立在这一原理之上。

  • 大地测量学 —— 研究地球形状、大小与地表点位的学科,pyproj 的距离与方位角计算服务于这一领域。

  • 地理信息系统 —— 采集、管理、分析与展示空间数据的系统,常以 pyproj 完成其中的坐标转换环节。

  • numpy —— Python 数值计算库,pyproj 针对其数组类型做了输入输出优化。

参考资料

  1. pypi.org 上的网页 [引用日期2026-10-14]
  2. pyproj-3.6.1-5.fc41 [引用日期2026-10-14]
  3. geography/py-proj - The NetBSD Packages Collection [引用日期2026-10-14]
  4. Proj¶ [引用日期2026-10-14]
  5. pyproj.proj — pyproj 2.6.0 documentation [引用日期2026-10-14]
  6. Glossary¶ [引用日期2026-10-14]
  7. esri.com 上的网页 [引用日期2026-10-14]
  8. pyproj-license-information [引用日期2026-10-14]
  9. [build-system] [引用日期2026-10-14]
  10. pyproj4/pyproj: 3.0.0.post1 [引用日期2026-10-14]
  11. igadc.cn 上的网页 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T20:35:16Z

历史版本

本条目引用的词条
PROJ 坐标参考系 地图投影 大地测量学 地理信息系统 numpy