projinfo项目

6.0.0 新版功能.

大地测量对象和坐标操作查询

简介

projinfo
[-o formats] [-k crs|operation|datum|ensemble|ellipsoid] [--summary] [-q]
[[--area name_or_code] | [--bbox west_long,south_lat,east_long,north_lat] ]
[--spatial-test contains|intersects]
[--crs-extent-use none|both|intersection|smallest]
[--grid-check none|discard_missing|sort|known_available]
[--pivot-crs always|if_no_direct_transformation|never|{{auth:code[,auth:code] *}]
[--show-superseded] [--hide-ballpark] [--accuracy {accuracy}]
[--allow-ellipsoidal-height-as-vertical-crs]
[--boundcrs-to-wgs84]
[--authority name]
[--main-db-path path] [--aux-db-path path]*
[--dump-db-structure]
[--identify] [--3d]
[--output-id AUTH:CODE]
[--c-ify] [--single-line]
--搜索路径|--远程数据
--List-CRS [list-crs-filter] |
--转储数据库-结构 [{{object_definition}} | {{object_reference}}] |
{OBJECT_DEFINITION}|{OBJECT_REFERENCE}|(-s{SRS_def}-t{SRS_def})

其中{objectu definition}或{srsu def}是 proj_create()

  • 项目字符串,

  • 一根WKT弦,

  • 目标代码(如“EPSG:4326", "骨灰盒:ogc:定义:crs:EPSG::4326“,”骨灰盒:ogc:定义:协调操作:EPSG::1671“),

  • 对象名。e、 “北纬84米”区域。在这种情况下,由于不保证唯一性,将应用启发式方法来确定适当的最佳匹配。

  • 组合复合坐标系参考的OGC URN(例如骨灰盒:ogc:定义:crs,电子稳定程序:crs::2393,crs:EPSG公司:5717“或自定义缩写语法”EPSG:2393+5717"),

  • OGC URN结合了投影或衍生CR的参考,例如投影3D CR的参考“UTM区域31N/WGS 84(3D)”:骨灰盒:ogc:定义:crs,电子稳定程序:crs:4979,cs:PROJ::ENh,坐标操作:EPSG::16031" ( 在6.2中添加

  • 一个OGC URN,用于合并串联操作的引用(例如骨灰盒:ogc:定义:协调操作,坐标操作:EPSG●3895,坐标操作:EPSG::1618")

  • PROJJSON字符串。Json架构位于https://proj.org/schemas/v0.4/projjson.schema.json( 在6.2中添加 )

  • 由两个用“+”分隔的对象名组成的复合CRS。e、 g.“WGS 84+EGM96高度”( 在7.1中添加

{objectu reference}是一个以'@'字符开头的文件名。{objectu reference}引用的文件必须包含有效的{objectu definition}。

描述

projinfo 是一个程序,可以查询有关大地测量对象、坐标参考系(CRS)或坐标操作的信息,当 -s-t 选项,并以不同格式(PROJ string、WKT string或PROJJSON string)显示。

它还可以用于查询两个CR之间可用的坐标操作。

该程序的命名引用了GDAL gdalsrsinfo 提供部分类似的服务。

以下控制参数可以按任意顺序出现:

-o formats

格式是逗号分隔的以下各项的组合: alldefaultPROJWKT_ALLWKT2:2015WKT2:2019WKT1:GDALWKT1:ESRIPROJJSONSQL

除外 alldefault ,其他格式前面可以加 - 禁用它们。

备注

WKT2U 2019之前被称为WKT2U 2018。

备注

在proj6.3.0之前,WKT1:GDAL隐式地调用--boundcrs-to-wgs84。现在已经不是这样了。

备注

如果指定了SQL, --output-id 必须指定。

-k crs|operation|datum|ensemble|ellipsoid

用于查询具有权限:代码,当存在具有相同代码的CRS、坐标运算或椭球体时,确定对象的(k)ind。默认为crs。

--summary

当列出两个CR之间可用的坐标操作时,以摘要格式返回结果,只提及坐标操作的名称、精度和使用区域。

备注

仅用于坐标运算计算

-q

打开安静模式。安静模式仅适用于单个对象上的查询,并且只选择一种输出格式。prowkt或prowkt只在prowkt模式下显示,而不在other模式下显示。然后,输出可能与其他实用程序中的管道兼容。

--area name_or_code

指定一个感兴趣的区域,以在研究两个CR之间的坐标运算时限制结果。感兴趣的区域可以指定为名称(例如“丹麦-陆上”)或权限:代码(爱普生:3237)此选项不包括 --bbox .

备注

仅用于坐标运算计算

--bbox west_long,south_lat,east_long,north_lat

指定一个感兴趣的区域,以在研究两个CR之间的坐标运算时限制结果。感兴趣的区域被指定为具有地理坐标的边界框,在未指定的地理坐标系中以度表示。 west_longeast_long 应该在 [-180,180] 范围,和 south_latnorth_lat 在 [-90,90] . west_long 一般低于 east_long ,除非感兴趣的区域穿过反地磁线。

备注

仅用于坐标运算计算

--spatial-test contains|intersects

指定如何将在数据库中找到的坐标运算的使用区域与使用显式指定的使用区域进行比较 --area--bbox ,或从源和目标CRS的使用区域隐含地派生。默认情况下, projinfo 将仅保持其使用范围严格在感兴趣区域内的协调操作 (contains 战略)。如果使用 intersects 战略,放宽空间测试,并列出其使用区域至少部分与感兴趣区域相交的任何坐标操作。

备注

仅用于坐标运算计算

--crs-extent-use none|both|intersection|smallest

指定在未指定显式区域时要考虑的感兴趣区域 --area--bbox 选项。默认情况下 (smallest 策略),将查看源或目标CR的使用区域,并将面积最小的一个用作感兴趣的区域。如果使用 none ,不使用感兴趣的区域。如果使用 both ,仅协调相关的操作(包含或相交于 --spatial-test 策略)选择两个CR的使用区域。如果使用 intersection ,感兴趣的区域是源和目标CR使用区域边界框的交点

备注

仅用于坐标运算计算

--grid-check none|discard_missing|sort|known_available

指定在研究两个CR之间的坐标运算时,坐标运算所需的水平或垂直移动网格的存在或不存在如何影响返回的结果。默认策略是 sort (如果 PROJ_NETWORK 未定义)。在这种情况下,将返回所有候选操作,但网格的实际可用性用于确定排序顺序。也就是说,如果坐标操作涉及使用PROJ资源目录中不可用的网格(由 PROJ_LIB 环境变量的结果将列在底部。这个 none 策略完全禁用对网格存在性的检查,这将返回结果,就像所有可用的网格一样。这个 discard_missing 策略丢弃包含项目资源目录中不存在的网格的结果。这个 known_available 策略将丢弃涉及项目资源目录中不存在的网格以及CDN未知的网格的结果。这是默认策略 PROJ_NETWORK 设置为 ON .

备注

仅用于坐标运算计算

--pivot-crs always|if_no_direct_transformation|never|{auth:code[,auth:code]*}

确定在研究两个CRS之间的坐标运算时是否可以使用中间(枢轴)CRS。一个典型的例子是WGS84枢轴。默认情况下, projinfo 如果没有直接转型,将考虑任何潜在的支点( if_no_direct_transformation )。如果使用 never 策略,则将仅使用源和目标CRS之间的直接转换。如果使用 always 战略,即使存在直接转换,也将考虑中间CRS。还可以通过指定一个或多个CRS的权限来限制要考虑的透视CRS:代码。

备注

仅用于坐标运算计算

--show-superseded

启用时,将列出被其他操作取代的坐标操作。请注意,替换并不等同于弃用:被取代的操作仍然被认为是有效的,尽管它们有更好的等价物,而弃用的操作被确定为错误的,根本不被考虑。

备注

仅用于坐标运算计算

--hide-ballpark

7.1 新版功能.

隐藏任何是或包含 Ballpark transformation

备注

仅用于坐标运算计算

--accuracy {accuracy}

8.0 新版功能.

为返回的坐标操作设置所需的最小精度。

备注

仅用于坐标运算计算

--allow-ellipsoidal-height-as-vertical-crs

8.0 新版功能.

允许将地理或投影的3D CRS导出为垂直CRS表示椭球体高度的复合CRS。

备注

仅用于输出和GDAT1:CRS

--boundcrs-to-wgs84

指定时,此选项研究从单个CR、源或目标CR的基本地理CR到WGS84地理CR的坐标操作,如果找到,则将这些CR包装到BoundCRS对象中。这主要用于早期绑定方法。

--authority name

在按名称指定对象或计算坐标运算时,指定要限制查找对象的机构的名称。默认情况下,允许所有权限。

与SQL OUTPUT一起使用时,这会限制中间对象所属的权限(缺省值为EPSG和PROJ)。请注意, --output-id 选项也将被隐式添加。

--main-db-path path

指定要使用的数据库的名称和路径 projinfo 。默认为 proj.db 在项目资源目录中。

--aux-db-path path

指定要与主数据库组合的辅助数据库的名称和路径。这些辅助数据库必须具有与主数据库相同的表结构,但可以部分填充,并且它们的条目可以引用主数据库的条目。可以重复该选项以指定多个辅助数据库。

--identify

当与对象定义一起使用时,它查询PROJ数据库以查找与对象接近或相同的已知对象,通常是CRS。每个候选对象都与一个近似似然百分比相关联。这在与缺少EPSG标识符的WKT字符串(如ESRI WKT1)一起使用时非常有用。这也可以用于项目字符串。例如, +proj=utm +zone=31 +datum=WGS84 +type=crs 将以70%到电子邮政编码:32631

--dump-db-structure

8.1 新版功能.

输出SQL语句序列以创建新的空的有效辅助数据库。可以将此选项指定为该实用程序的唯一开关。如果还指定了CRS对象和 --output-id 选项,则将追加该对象作为SQL语句的定义。

--list-crs [list-crs-filter]

8.1 新版功能.

从数据库中输出已过滤的CRSS的列表(授权机构名称:代码和CRS名称)。如果未提供筛选器,则不推荐使用的CRS的所有授权名称和类型都将被转储。LIST-CRS-FILTER是逗号分隔的组合,包括:ALLOW_DEVERATED、GLODITIC、GEOCENTERIC、GEOGIC、GEOGICAL_2D、GEOGICAL_3D、LEGAL、PROPECTED、COMPLICATE。受选项影响 --authority--area--bbox--spatial-test

--3d

6.3 新版功能.

使用基本大地测量CRS的椭球体,将2D CRS提升到其3D版本,其中垂直轴是以米为单位的椭球体高度。根据项目版本和所涉及的CRS的确切性质,特别是在Proj9.1之前,2D和3D CRS的混合可能会导致2D或3D转换。从Proj 9.1开始,这两个CR都需要是3D的,才能进行垂直变换。

--output-id=AUTH:NAME

8.1 新版功能.

分配给对象的标识符(用于SQL输出)。

强烈建议不要在公共注册表中添加新对象,例如 EPSGESRIIAU 等。用户应改用自定义授权名称。如果要将新对象添加到官方EPSG注册表中,请用户遵循https://epsg.org/dataset-change-requests.html.上解释的程序

--dump-db-structure ,用户可以创建辅助数据库,而不是直接修改主数据库 proj.db 数据库。请参阅 example how to export to an auxiliary database

这些辅助数据库可以通过 proj_context_set_database_path() 或者 PROJ_AUX_DB 环境变量。

--c-ify

仅供开发商使用。修改实用工具的字符串输出,以便将这些字符串放入C/C++代码中是很容易的

--single-line

在一行上输出PROJ、WKT或PROJJSON字符串,而不是默认的多行缩进。

--searchpaths

7.0 新版功能.

输出要查找项目资源的目录(如果不使用C API,如 proj_context_set_search_paths() 这将覆盖它们。

--remote-data

7.0 新版功能.

显示有关if的信息 网络能力 以及相关的URL。

实例

  1. 查询对应的CRS对象EPSG:4326

projinfo EPSG:4326

输出:

PROJ.4 string:
+proj=longlat +datum=WGS84 +no_defs +type=crs

WKT2:2019 string:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    USAGE[
        SCOPE["unknown"],
        AREA["World"],
        BBOX[-90,-180,90,180]],
    ID["EPSG",4326]]
  1. 列出感兴趣区域内NAD27(用其CRS名称设计)和NAD83(用其EPSG代码4269设计)之间的坐标操作

projinfo -s NAD27 -t EPSG:4269 --area "USA - Missouri"

输出:

DERIVED_FROM(EPSG):1241, NAD27 to NAD83 (1), 0.15 m, USA - CONUS including EEZ

PROJ string:
+proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=unitconvert \
+xy_in=deg +xy_out=rad +step +proj=hgridshift +grids=conus \
+step +proj=unitconvert +xy_in=rad +xy_out=deg +step +proj=axisswap +order=2,1

WKT2:2019 string:
COORDINATEOPERATION["NAD27 to NAD83 (1)",
    SOURCECRS[
        GEOGCRS["NAD27",
            DATUM["North American Datum 1927",
                ELLIPSOID["Clarke 1866",6378206.4,294.978698213898,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            CS[ellipsoidal,2],
                AXIS["geodetic latitude (Lat)",north,
                    ORDER[1],
                    ANGLEUNIT["degree",0.0174532925199433]],
                AXIS["geodetic longitude (Lon)",east,
                    ORDER[2],
                    ANGLEUNIT["degree",0.0174532925199433]]]],
    TARGETCRS[
        GEOGCRS["NAD83",
            DATUM["North American Datum 1983",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            CS[ellipsoidal,2],
                AXIS["geodetic latitude (Lat)",north,
                    ORDER[1],
                    ANGLEUNIT["degree",0.0174532925199433]],
                AXIS["geodetic longitude (Lon)",east,
                    ORDER[2],
                    ANGLEUNIT["degree",0.0174532925199433]]]],
    METHOD["CTABLE2"],
    PARAMETERFILE["Latitude and longitude difference file","conus"],
    OPERATIONACCURACY[0.15],
    USAGE[
        SCOPE["unknown"],
        AREA["USA - CONUS including EEZ"],
        BBOX[23.81,-129.17,49.38,-65.69]],
    ID["DERIVED_FROM(EPSG)",1241]]
  1. 将对象导出为PROJJSON字符串

projinfo GDA94 -o PROJJSON -q

输出:

{
    "type": "GeographicCRS",
    "name": "GDA94",
    "datum": {
        "type": "GeodeticReferenceFrame",
        "name": "Geocentric Datum of Australia 1994",
        "ellipsoid": {
            "name": "GRS 1980",
            "semi_major_axis": 6378137,
            "inverse_flattening": 298.257222101
        }
    },
    "coordinate_system": {
        "subtype": "ellipsoidal",
        "axis": [
        {
            "name": "Geodetic latitude",
            "abbreviation": "Lat",
            "direction": "north",
            "unit": "degree"
        },
        {
            "name": "Geodetic longitude",
            "abbreviation": "Lon",
            "direction": "east",
            "unit": "degree"
        }
        ]
    },
    "area": "Australia - GDA",
    "bbox": {
        "south_latitude": -60.56,
        "west_longitude": 93.41,
        "north_latitude": -8.47,
        "east_longitude": 173.35
    },
    "id": {
        "authority": "EPSG",
        "code": 4283
    }
}
  1. 导出SQL语句以在辅助数据库中插入新的CRS。

# Get the SQL statements for a custom CRS
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" --output-id HOBU:MY_CRS -o SQL -q > my_crs.sql
cat my_crs.sql

# Initialize an auxiliary database with the schema of the reference database
echo ".schema" | sqlite3 /path/to/proj.db | sqlite3 aux.db

# Append the content of the definition of HOBU:MY_CRS
sqlite3 aux.db < my_crs.db

# Check that everything works OK
projinfo --aux-db-path aux.db HOBU:MY_CRS

或者更简单地说:

# Create an auxiliary database with the definition of a custom CRS.
projinfo "+proj=merc +lat_ts=5 +datum=WGS84 +type=crs +title=my_crs" --output-id HOBU:MY_CRS --dump-db-structure | sqlite3 aux.db

# Check that everything works OK
projinfo --aux-db-path aux.db HOBU:MY_CRS

输出:

INSERT INTO geodetic_crs VALUES('HOBU','GEODETIC_CRS_MY_CRS','unknown','','geographic 2D','EPSG','6424','EPSG','6326',NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_GEODETIC_CRS_MY_CRS','geodetic_crs','HOBU','GEODETIC_CRS_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
INSERT INTO conversion VALUES('HOBU','CONVERSION_MY_CRS','unknown','','EPSG','9805','Mercator (variant B)','EPSG','8823','Latitude of 1st standard parallel',5,'EPSG','9122','EPSG','8802','Longitude of natural origin',0,'EPSG','9122','EPSG','8806','False easting',0,'EPSG','9001','EPSG','8807','False northing',0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_CONVERSION_MY_CRS','conversion','HOBU','CONVERSION_MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
INSERT INTO projected_crs VALUES('HOBU','MY_CRS','my_crs','','EPSG','4400','HOBU','GEODETIC_CRS_MY_CRS','HOBU','CONVERSION_MY_CRS',NULL,0);
INSERT INTO usage VALUES('HOBU','USAGE_PROJECTED_CRS_MY_CRS','projected_crs','HOBU','MY_CRS','PROJ','EXTENT_UNKNOWN','PROJ','SCOPE_UNKNOWN');
PROJ.4 string:
+proj=merc +lat_ts=5 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +type=crs

WKT2:2019 string:
PROJCRS["my_crs",
    BASEGEOGCRS["unknown",
        ENSEMBLE["World Geodetic System 1984 ensemble",
            MEMBER["World Geodetic System 1984 (Transit)"],
            MEMBER["World Geodetic System 1984 (G730)"],
            MEMBER["World Geodetic System 1984 (G873)"],
            MEMBER["World Geodetic System 1984 (G1150)"],
            MEMBER["World Geodetic System 1984 (G1674)"],
            MEMBER["World Geodetic System 1984 (G1762)"],
            ELLIPSOID["WGS 84",6378137,298.257223563,
                LENGTHUNIT["metre",1]],
            ENSEMBLEACCURACY[2.0]],
        PRIMEM["Greenwich",0,
            ANGLEUNIT["degree",0.0174532925199433]],
        ID["HOBU","GEODETIC_CRS_MY_CRS"]],
    CONVERSION["unknown",
        METHOD["Mercator (variant B)",
            ID["EPSG",9805]],
        PARAMETER["Latitude of 1st standard parallel",5,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8823]],
        PARAMETER["Longitude of natural origin",0,
            ANGLEUNIT["degree",0.0174532925199433],
            ID["EPSG",8802]],
        PARAMETER["False easting",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8806]],
        PARAMETER["False northing",0,
            LENGTHUNIT["metre",1],
            ID["EPSG",8807]]],
    CS[Cartesian,2],
        AXIS["(E)",east,
            ORDER[1],
            LENGTHUNIT["metre",1]],
        AXIS["(N)",north,
            ORDER[2],
            LENGTHUNIT["metre",1]],
    ID["HOBU","MY_CRS"]]
  1. 以wkt1:gdal输出格式在单行上获取epsg:25832的wkt表示

projinfo -o WKT1:GDAL --single-line EPSG:25832

输出:

WKT1:GDAL string:
PROJCS["ETRS89 / UTM zone 32N",GEOGCS["ETRS89",DATUM["European_Terrestrial_Reference_System_1989",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6258"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4258"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",9],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","25832"]]