资源文件

一些包含预配置转换和某些投影的默认参数的文件与PROJ发行版捆绑在一起。Init文件包含各种坐标参考系和 defaults 文件包含选定投影参数的默认值。

除了捆绑的init文件外,该项目还分发了许多包,其中包含转换网格和主项目包中未包含的其他init文件。

在哪里查找项目资源文件?

Proj将尝试从几个目录中找到其资源文件--数据库、转换网格或初始化文件。按顺序检查以下路径:

  • 对于具有显式相对或绝对路径的资源文件,在文件名中指定的目录。

  • proj_context_set_file_finder() . 如果设置了,则不会运行下一个测试。

  • 路径设置为 proj_context_set_search_paths() . 如果设置,则不会运行下一个测试。

  • 7.0 新版功能.

    项目用户可写目录,即:

    • 在Windows上, ${{LOCALAPPDATA}}/proj

    • 在MacOS上, ${{HOME}}/Library/Application Support/proj

    • 在其他平台(Linux)上, ${{XDG_DATA_HOME}}/proj 如果 XDG_DATA_HOME 是被定义的。不然的话 ${{HOME}}/.local/share/proj

  • 由环境变量使用设置的路径 PROJ_LIB 。在Linux/MacOS/Unix上,使用 : 来分隔路径。在Windows上, ;

  • 7.0 新版功能.

    这个 ../share/proj/ and its contents are found automatically at run-time if the installation respects the build structure. That is, the binaries and proj.dll/libproj.so 安装在以下位置 ../bin/../lib/ ,资源文件位于 ../share/proj/

  • 构建到proj中作为其资源安装目录的路径(其值为 $(pkgdatadir) 对于使用Makefile生成系统的生成或 ${{CMAKE_INSTALL_PREFIX}}/${{DATADIR}} 用于CMake版本)。但是,请注意,由于这是一个硬连接路径设置,因此只有在整个项目安装不移到其他地方时才能起作用。

    备注

    如果项目是用 PROJ_LIB_ENV_VAR_TRIED_LAST CMake选项,则在查看环境变量之前将尝试此硬连接路径 PROJ_LIB

  • 当前目录

当网络功能启用时,通过API和 proj_context_set_enable_network() 函数或 PROJ_NETWORK 环境变量设置为 ON ,PROJ将尝试使用存储在CDN(Content Delivery Network)存储上的远程网格。

proj.db

proj安装包括一个转换信息的SQLite数据库,库必须可以访问该数据库才能正常工作。如果找不到数据库,库将打印错误。

proj.ini

7.0 新版功能.

proj.ini 是一个文本配置文件,主要用于设置与网络相关的参数。

其默认内容为:

[general]
; Lines starting by ; are commented lines.
;

; Network capabilities disabled by default.
; Can be overridden with the PROJ_NETWORK=ON environment variable.
; network = on

; Can be overridden with the PROJ_NETWORK_ENDPOINT environment variable.
cdn_endpoint = https://cdn.proj.org

cache_enabled = on

cache_size_MB = 300

cache_ttl_sec = 86400

; Filename of the Certificate Authority (CA) bundle.
; Can be overriden with the PROJ_CURL_CA_BUNDLE / CURL_CA_BUNDLE environment variable.
; (added in PROJ 9.0)
; ca_bundle_path = /path/to/cabundle.pem

; Transverse Mercator (and UTM) default algorithm: auto, evenden_snyder or poder_engsager
; * evenden_snyder is the fastest, but less accurate far from central meridian
; * poder_engsager is slower, but more accurate far from central meridian
; * default will auto-select between the two above depending on the coordinate
;   to transform and will use evenden_snyder if the error in doing so is below
;   0.1 mm (for an ellipsoid of the size of Earth)
tmerc_default_algo = poder_engsager

变换网格

栅格文件对于在基准之间移动和转换非常重要。

PROJ支持CTable2、NTv1和NTv2文件进行水平网格校正,支持GTX文件格式进行垂直校正。有关格式的详细信息,请参阅 GDAL documentation . GDAL读取和写入所有格式。建议使用GDAL构建新的网格。

外部资源和打包网格

项目数据

这个 proj-data 包是所有资源文件的集合,这些文件可以免费与PROJ一起使用。该软件包在 GitHub 包裹里的东西都放在箱子上 PROJ CDN . 包的内容可以使用 projsync 打包或下载该包的zip存档并在 PROJ_LIB 目录。

项目基准网格

备注

下面描述的包可以用于Proj 7和更高版本,但主要用于Proj 6和更早版本。这个 proj-datumgrid 不再维护一系列程序包,仅保留用于遗留目的。

对于版本7之前的项目功能构建,安装 proj-datumgrid 是需要的。如果你已经从软件包系统安装了PROJ,那么很有可能这已经为你完成了。这个 proj-datumgrid 包提供了对于PROJ中的许多预定义转换非常重要的转换网格。包装中包括哪些网格可以在屏幕上看到 proj-datumgrid repository 以及那些网格的描述。这是主网格包,也是唯一需要的网格包。它包括各种旧的网格,这些网格主要是由于遗留原因而需要的。如果没有这个包,测试套件将失败得很惨。

区域一揽子计划

除了默认设置之外 proj-datumgrid 还分发包裹地区性包裹。其中包括在给定区域内有效的网格和初始化文件。这些包被划分为地理区域,以便按项目将所需的磁盘空间保持在最小。一些用户可能会使用覆盖多个地区的资源文件,在这种情况下,他们可以下载多个地区。

目前分发了三个区域资源文件包:

如果有人提供与非洲、南美、亚洲或南极洲相关的电网,我们将创建新的区域性一揽子计划。

单击链接可跳转到每个包的相关自述文件。保存在那里的包裹内容的详细信息。

小技巧

要下载各种datumgrid包,请访问 download section .

世界套餐

这个 world package 包括具有全局范围的栅格,例如全局大地水准面模型EGM08。

-最新软件包

以上所有包都有不同的版本,例如, proj-datumgrid-1.8proj-datumgrid-europe-1.4 。这个 -latest 包是指向给定包的最新版本的符号链接。这意味着链接https://download.osgeo.org/proj/proj-datumgrid-north-america-latest.zip等同于https://download.osgeo.org/proj/proj-datumgrid-north-america-1.2.zip(在撰写本文时)。

其他变换网格

以下是未包含在上述网格分布中的各国的网格资源列表。

自由网格

以下是根据免费开放许可证分发的网格列表。

匈牙利

Hungarian grid ETRS89-HD72/EOV(epsg:23700),包括水平网格和立面网格

非自由网格

并非所有的gridshift文件都有许可证,允许它们自由分发,但用户可以通过免费合法的方式获得。

奥地利

概述 Austrian grids 以及其他与本地大地测量参考相关的资源。

巴西

Brazilian grids Corrego-Alegre 1961、Corrego-Alegre 1970-72、SAD69和SAD69(96)基准

荷兰

Dutch grid (下载前需要注册)

葡萄牙

Portuguese grids 对于ED50、里斯本1890、里斯本1937和Datum 73

南非

South African grid (开普敦至Hartebeesthoek94或WGS84)

西班牙

Spanish grids 对于ED50。

HTDP

本节介绍如何使用 crs2crs2grid.py 脚本和NGS/NOAA的HTDP(水平时间相关定位)网格移动建模程序,以生成与项目兼容的网格移动文件,用于各种NAD83历元和WGS84之间的精细等级转换。传统上,PROJ将NAD83和WGS84视为等同的,未能区分这些基准的不同纪元或实现。在许多测绘的尺度上,这是足够的,但随着人们对高分辨率图像和其他高分辨率测绘的兴趣的增长,这是不够的。此外,随着北美地壳随着时间的推移而漂移,NAD83和WGS84之间的位移也会增加(在过去20年中超过1英尺)。

获取和构建HTDP

HTDP建模程序是用FORTRAN语言编写的。源代码和文档可以在HTDP页面上找到http://www.ngs.noaa.gov/TOOLS/Htdp/Htdp.shtml

在Linux系统上,需要安装GFortran或一些Fortran编译器。对于Ubuntu来说,类似于以下内容应该可以工作。

apt-get install gfortran

要编译该程序,请执行类似以下操作以生成二进制文件 htdp 从源代码中删除。

gfortran htdp.for -o htdp

vbl.得到,得到 crs2crs2grid.py

这个 crs2crs2grid.py 脚本可在https://github.com/OSGeo/gdal/blob/master/swig/python/gdal-utils/osgeo_utils/samples/crs2crs2grid.py上找到

脚本取决于GDAL Python绑定是否可操作;如果不能操作,则会出现如下错误:

Traceback (most recent call last):
  File "./crs2crs2grid.py", line 37, in <module>
    from osgeo import gdal, gdal_array, osr
ImportError: No module named osgeo

使用

crs2crs2grid.py
        <src_crs_id> <src_crs_date> <dst_crs_id> <dst_crs_year>
        [-griddef <ul_lon> <ul_lat> <ll_lon> <ll_lat> <lon_count> <lat_count>]
        [-htdp <path_to_exe>] [-wrkdir <dirpath>] [-kwf]
        -o <output_grid_name>

 -griddef: by default the following values for roughly the continental USA
           at a six minute step size are used:
           -127 50 -66 25 251 611
 -kwf: keep working files in the working directory for review.
crs2crs2grid.py 29 2002.0 8 2002.0 -o nad83_2002.ct2

的目标是 crs2crs2grid.py 是为指定区域生成栅格移位文件。该区域是使用 -griddef 换一下。如果缺少美国大陆区域,则使用该区域。该脚本为格网定义创建一组采样点,运行 htdp 然后解析得到的点并计算逐点移位以编码到最终的栅格移位文件中。默认情况下,假定 htdp 位于可执行文件路径中。如果不是,请使用 -htdp 换一下。

这个 htdp 程序支持多个CRS之间的转换和每个(或大多数?)其中,您需要提供CRS确定的日期。HTDP计划中提供的全套CRS ID包括:

 1...NAD_83(2011) (North America tectonic plate fixed)
 29...NAD_83(CORS96)  (NAD_83(2011) will be used)
 30...NAD_83(2007)    (NAD_83(2011) will be used)
 2...NAD_83(PA11) (Pacific tectonic plate fixed)
 31...NAD_83(PACP00)  (NAD 83(PA11) will be used)
 3...NAD_83(MA11) (Mariana tectonic plate fixed)
 32...NAD_83(MARP00)  (NAD_83(MA11) will be used)

 4...WGS_72                             16...ITRF92
 5...WGS_84(transit) = NAD_83(2011)     17...ITRF93
 6...WGS_84(G730) = ITRF92              18...ITRF94 = ITRF96
 7...WGS_84(G873) = ITRF96              19...ITRF96
 8...WGS_84(G1150) = ITRF2000           20...ITRF97
 9...PNEOS_90 = ITRF90                  21...IGS97 = ITRF97
10...NEOS_90 = ITRF90                   22...ITRF2000
11...SIO/MIT_92 = ITRF91                23...IGS00 = ITRF2000
12...ITRF88                             24...IGb00 = ITRF2000
13...ITRF89                             25...ITRF2005
14...ITRF90                             26...IGS05 = ITRF2005
15...ITRF91                             27...ITRF2008
                                        28...IGS08 = ITRF2008

典型的用例是从特定日期的NAD83映射到某个日期的WGS84。在这种情况下,源CRS Id“29”(NADïu 83(CORS96))和目的CRS Id是“8”(WGSïu 84(G1150))。还需要选择源日期和目标日期(epoch)。例如:

crs2crs2grid.py 29 2002.0 8 2002.0 -o nad83_2002.ct2

输出是一个CTable2格式的网格移位文件,适合与PROJ(4.8.0或更新版本)一起使用。它的用途可能是:

cs2cs +proj=latlong +ellps=GRS80 +nadgrids=./nad83_2002.ct2 +to +proj=latlong +datum=WGS84

也见

初始化文件

初始化文件用于为经常使用的转换(如EPSG数据库中的转换)预配置项目字符串。大多数初始文件包含从给定坐标系到WGS84的转换。这使得在任意两个坐标参考系之间进行转换变得容易 cs2cs 。但是,init文件可以包含任何项目字符串,并且不一定要跟在 CS2cs WGS84作为轴心基准的范例。ITRF init文件就是一个很好的例子。

许多init文件预先与proj捆绑在一起,但也可以添加您自己的定制init文件。中列出的目录中查找init文件 PROJ_LIB 环境变量。

init文件的格式是尖括号中的标识符和项目字符串:

<3819> +proj=longlat +ellps=bessel
       +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs <>

上面的示例是 epsg 初始化文件。这是EPSG数据库中ID为3819的坐标参考系。可以通过在注释前面加“#”来插入注释。在4.10.0版本中,init文件中现在接受一个新的特殊元数据条目。它可以用公共API中的函数进行解析。epsg init文件中的元数据条目在编写时如下所示:

<metadata> +version=9.0.0 +origin=EPSG +lastupdate=2017-01-10

init文件中预先配置的项目字符串按以下方式使用:

$ cs2cs -v +proj=latlong +to +init=epsg:3819
# ---- From Coordinate System ----
#Lat/long (Geodetic alias)
#
# +proj=latlong +ellps=WGS84
# ---- To Coordinate System ----
#Lat/long (Geodetic alias)
#
# +init=epsg:3819 +proj=longlat +ellps=bessel
# +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs

使用时可以覆盖参数 +init . 只需将参数添加到proj字符串中 +init 参数。例如,通过覆盖椭球体,如下例所示

+init=epsg:25832 +ellps=intl

其中使用Hayford椭球体代替预定义的GRS80椭球体。

还可以添加未在init文件中指定的其他参数,例如,通过在应用ITRF2014:NOAM板块运动模型时添加中心纪元:

+init=ITRF2014:NOAM +t_epoch=2010.0

然后扩展到

+proj=helmert +drx=0.000024 +dry=-0.000694 +drz=-0.000063 +convention=position_vector +t_epoch=2010.0

下面是与PROJ打包的init文件的列表。

名字

描述

GL27级

五大湖网格

ITRF2000型

ITRF2000和其他ITRF之间的全套转换参数

ITRF2008年

ITRF2008和其他ITRF之间的全套转换参数

ITRF2014年

ITRF2014和其他ITRF之间的全套转换参数

nad27型

州平面坐标系,北美基准1927

nad83型

州平面坐标系,北美基准1983