判断点是否在多边形内

判断某个点是否在某多边形内是常见的问题,比如某点是否在某个城市内、某城市位于哪个国家等。但地球是一个球面,对于比较小的多边形,采用平面的算法通常不会有问题。但是在某些情况下(尤其是多边形非常大的时候),直接应用平面上的算法会有问题。其中最常见的就是多边形横跨 180° 经线的场景。

本文将以 Python 作为示例代码,探索解决这种问题的方案。

阅读全文

用 Python 读写 Fortran 格式化的数据

Fortran 至今仍然是学术界流行的编程语言。得益于其在科学计算方面的出色表现(以及某些历史传承),众多的科研软件都基于 Fortran 编写。同时,很多文件格式也以 Fortran 的格式化输出风格定义。大地测量学领域众多的数据格式都使用 Fortran 格式定义,比如 RINEX、IONEX、SINEX、SP3 等。

Fortran 对输入输出的格式化要求严谨,使用 Python 自己的字符串格式化语法得到的文本很难符合其规范(或者代码可读性很差)。本文介绍在 Python 中使用 Fortran 格式化风格的包:fortranformat,可以使用它对代码进行一些优化。

阅读全文

Python 解压 UNIX/Linux 压缩文件的最快方式

IGS 的数据和产品通常用 compressgzip 程序压缩,以 .Z 或 .gz 的压缩文件形式提供。这是 UNIX/Linux 操作系统常用的压缩文件格式。用户在下载之后需首先使用软件对其进行解压。本文以实验方式探讨一个 Python 编程中的问题:如何最快的解压缩 .Z 或 .gz 文件?并且,代码最好是容易部署和移植的。

主要测试了通过标准库/扩展库和调用 gzip 程序的解压方法,以及各自的线程池和异步 I/O 版本。

阅读全文

CentOS 操作系统安装 Bernese

之前的文章介绍过了 Bernese 软件在 Ubuntu 操作系统下的安装过程。考虑到 CentOS 是在服务器和工作站领域用户量非常大的 Linux 发行版,并且其依赖环境的配置过程与 Ubuntu OS 有较多的不同,因此本文介绍在 CentOS 下安装 Bernese 软件的过程。

我实际使用的操作系统为 CentOS 7,Bernese 软件版本为 5.2。鉴于 RHEL(Red Hat Enterprise Linux)与 CentOS 有非常密切的关系,因此该安装过程同样适用于对应的 RHEL 7 版本。

阅读全文

Ubuntu 操作系统安装 Bernese

Bernese software 是另一个著名的高精度 GNSS 数据处理软件。由瑞士伯尔尼大学(University of Berne)天文研究所开发,能够处理包括 GPS、GLONASS 和卫星激光测距(SLR)等多种观测数据。该程序适用于 Windows 或 UNIX/Linux 操作系统,内嵌图形界面(虽然比较丑),操作友好,模型准确,解算精度高,并且具有强大的数据批处理能力。

当前 Bernese 软件可以购买的最新版本为 5.2,获得授权后,你可以使用本文介绍的方法将其安装到运行 Linux 操作系统的计算机上。我实际使用的 Linux 发行版为 elementary OS Loki 0.4.1,但本安装过程应该也适用于 Ubuntu 16.04 LTS。

阅读全文

基于 elementary OS 配置数据处理与分析环境

GNU/Linux 操作系统的发行版众多,各有其特色和侧重。对于使用者而言,需要明确自己的需求,才能选择适合自己的发行版。此外,安装 Linux 系统之后,配置应用程序也是必要的过程。本文以 elementary OS 为例,记录我配置用于 GNSS 数据处理与分析工作环境的过程。首先是对自己经验的总结,便于再次安装时查看;对于其他 Linux 的使用者而言,或许也能有一点儿借鉴意义。

需要说明的是:这里安装的某些软件可能基于个人偏好,并不一定是唯一的选择。

阅读全文

Cartopy 绘图示例库

Cartopy 是为了向 Python 添加地图制图功能而开发的扩展库。该项目致力于以 matplotlib 包为基础,用简单直观的方式操作各类地理要素的成图。Cartopy 官网的画廊页面已经提供了很多绘图的例子,它们和官方文档一起,是学习该工具的主要材料。

本文亦提供一些例子,演示 Cartopy 在测量学等领域的应用,包括绘制中国政区图、IGS 站点分布、GNSS 控制网、地球板块分布、GNSS 速度场、电子含量分布以及突出显示某些地理要素等,旨在提供大地测量学方面的补充。

阅读全文

RTKLIB 中 convbin 模块的使用

RTKLIB 是著名的 GNSS 数据处理软件,提供标准单点定位(SPP)和精密单点定位(PPP)等功能。它由东京海洋大学的 Tomoji Takasu 编写,并开源在 Github 网站上。但本文的关注点并不是该程序如何使用,只是介绍其中用于数据转换的一个小模块:convbin。

convbin 是包含在 RTKLIB 中的一个命令行程序,它可以将 RTCM2、RTCM3、u-blox 或 BINEX 等格式的 GNSS 数据转换到 RINEX 2.11。你可以使用该模块完成从原始数据文件到 RINEX 格式的转换。

阅读全文

使用 PyNMEA2 解析 NMEA 0183 协议

NMEA 0183 是一套定义接收机输出的标准协议,有几种不同的格式,每种都是独立的、逗点隔开文本数据。它们包含了可见的卫星、卫星状态、定位状态以及接收机速度等信息。NMEA 0183 实际上已成为所有的 GPS 接收机最通用的数据输出格式,同时它也被用于与 GPS 接收机接口的大多数的软件包里。

pynmea2 是一个用来处理 NMEA 0183 协议的第三方模块,本文将介绍该模块的安装与使用方法。

阅读全文

TRACK 模块的配置与使用

TRACK 是 GAMIT/GLOBK 程序的重要组成部分,该模块使用卡尔曼滤波算法,提供基于差分相位观测量的动态后处理定位功能。随着针对如飞行器、车辆、船舶或浮标等运动设备的 GPS 动态定位技术需求的不断增加,TRACK 模块凭借较高的数据处理精度,已成为该领域最受重视的程序工具之一。

本文将介绍 TRACK 模块的使用和配置过程。

阅读全文