变压器

这个 pyproj.Transformer 具有执行二维、三维和4d(时间)转换的能力。它可以做任何项目命令行程序 proj <https://proj.org/apps/proj.html>cs2cs <https://proj.org/apps/cs2cs.html>cct <https://proj.org/apps/cct.html> 可以。这意味着它允许在任意一对可定义坐标系之间进行转换,包括支持基准转换。

警告

如果源和目标CRS被定义为具有北向的第一个坐标分量点,则可以交换轴顺序(参见项目常见问题解答 axis order )。您可以使用 pyproj.CRS 类。如果您喜欢保持轴的顺序和X、Y一样,可以使用 always_xy 创建时的选项 Transformer .

pyproj.Transformer

class pyproj.transformer.Transformer[源代码]

Transformer类用于帮助重新使用转换,而不需要重新创建它们。目标是使重复转换更快。

此外,它还提供多种初始化方法。

static from_crs(crs_from, crs_to)[源代码]

用一个变压器 pyproj.CRS 或用于创建的输入。

参数:
  • proj_from (pyproj.CRS or input used to create one) -- 输入数据的投影。
  • proj_from -- 输出数据的投影。
返回:

返回类型:

pyproj.Transformer

static from_pipeline(proj_pipeline)[源代码]

从项目管线串中制作变压器。

https://proj4.org/operations/pipeline.html

参数:proj_pipeline (str) -- 投影管道字符串。
返回:
返回类型:pyproj.Transformer
static from_proj(proj_from, proj_to)[源代码]

用一个变压器 pyproj.Proj 或用于创建的输入。

参数:
  • proj_from (pyproj.Proj or input used to create one) -- 输入数据的投影。
  • proj_from -- 输出数据的投影。
返回:

返回类型:

pyproj.Transformer

itransform(points, switch=False, radians=False, errcheck=False)[源代码]

函数pyproj.transformer.transform的迭代器/生成器版本。

参数:
  • points (list) -- 点元组列表。
  • switch (boolean, optional) -- 如果为真x、y或lon,则点的lat坐标将切换为y、x或lat、lon。默认值为假。
  • radians (boolean, optional) -- 如果为真,则输入数据将以弧度为单位,如果投影是地理投影,则返回弧度。默认值为假(度)。管道转换忽略。
  • errcheck (boolean, optional (default False)) -- 如果为true,则在转换无效时引发异常。默认情况下,errcheck=false,并返回无效的转换 inf 也没有例外。

例子:

>>> from pyproj import Transformer
>>> transformer = Transformer.from_crs(4326, 2100)
>>> points = [(22.95, 40.63), (22.81, 40.53), (23.51, 40.86)]
>>> for pt in transformer.itransform(points): '{:.3f} {:.3f}'.format(*pt)
'2221638.801 2637034.372'
'2212924.125 2619851.898'
'2238294.779 2703763.736'
>>> pipeline_str = "+proj=pipeline +step +proj=longlat +ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg"
>>> pipe_trans = Transformer.from_pipeline(pipeline_str)
>>> for pt in pipe_trans.itransform([(2.1, 0.001)]): '{:.3f} {:.3f}'.format(*pt)
'120.321 0.057'
>>> transproj = Transformer.from_proj({"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'}, '+init=EPSG:4326')
>>> for pt in transproj.itransform([(-2704026.010, -4253051.810, 3895878.820)], radians=True): '{:.3f} {:.3f} {:.3f}'.format(*pt)
'-2.137 0.661 -20.531'
>>> transprojr = Transformer.from_proj('+init=EPSG:4326', {"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'})
>>> for pt in transprojr.itransform([(-2.137, 0.661, -20.531)], radians=True): '{:.3f} {:.3f} {:.3f}'.format(*pt)
'-2704214.394 -4254414.478 3894270.731'
transform(xx, yy, zz=None, radians=False, errcheck=False)[源代码]

转换两个坐标系之间的点。

参数:
  • xx (scalar or array (numpy or python)) -- 输入x坐标。
  • yy (scalar or array (numpy or python)) -- 输入Y坐标。
  • zz (scalar or array (numpy or python), optional) -- 输入Z坐标。
  • radians (boolean, optional) -- 如果为真,则输入数据将以弧度为单位,如果投影是地理投影,则返回弧度。默认值为假(度)。管道转换忽略。
  • errcheck (boolean, optional (default False)) -- 如果为true,则在转换无效时引发异常。默认情况下,errcheck=false,并返回无效的转换 inf 也没有例外。

例子:

>>> from pyproj import Transformer
>>> transformer = Transformer.from_crs("epsg:4326", "epsg:3857")
>>> x3, y3 = transformer.transform(33, 98)
>>> "%.3f  %.3f" % (x3, y3)
'10909310.098  3895303.963'
>>> pipeline_str = "+proj=pipeline +step +proj=longlat +ellps=WGS84 +step +proj=unitconvert +xy_in=rad +xy_out=deg"
>>> pipe_trans = Transformer.from_pipeline(pipeline_str)
>>> xt, yt = pipe_trans.transform(2.1, 0.001)
>>> "%.3f  %.3f" % (xt, yt)
'120.321  0.057'
>>> transproj = Transformer.from_proj({"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'}, '+init=EPSG:4326')
>>> xpj, ypj, zpj = transproj.transform(-2704026.010, -4253051.810, 3895878.820, radians=True)
>>> "%.3f %.3f %.3f" % (xpj, ypj, zpj)
'-2.137 0.661 -20.531'
>>> transprojr = Transformer.from_proj('+init=EPSG:4326', {"proj":'geocent', "ellps":'WGS84', "datum":'WGS84'})
>>> xpjr, ypjr, zpjr = transprojr.transform(xpj, ypj, zpj, radians=True)
>>> "%.3f %.3f %.3f" % (xpjr, ypjr, zpjr)
'-2704026.010 -4253051.810 3895878.820'

pyproj.transform

pyproj.transformer.transform(p1, p2, x, y, z=None, radians=False, errcheck=False)[源代码]

x2,y2,z2=变换(p1,p2,x1,y1,z1)

转换由项目实例p1和p2定义的两个坐标系之间的点。

由p1定义的坐标系中的点x1、y1、z1在由p2定义的坐标系中转换为x2、y2、z2。

z1是可选的,如果未设置,则假定为零(仅返回x2和y2)。如果可选关键字“radians”为真(默认值为假),则所有输入和输出坐标将以弧度表示,而不是地理输入/输出投影的默认度数。如果可选关键字“errcheck”设置为true,则在转换无效时引发异常。默认情况下,errcheck=false和 inf 为无效转换返回(未引发异常)。

除了在制图和地理投影坐标之间进行转换外,此函数还可以处理基准偏移(不能使用 __call__ 项目实例的方法)。它还允许其中一个坐标系是地理坐标系(proj='latlong')。

x、y和z可以是numpy或常规的python数组、python列表/元组或scalar。数组是最快的。对于地心坐标中的投影,x和y的值以米为单位给出。Z总是米。

示例用法:

>>> from pyproj import Proj, transform
>>> # projection 1: UTM zone 15, grs80 ellipse, NAD83 datum
>>> # (defined by epsg code 26915)
>>> p1 = Proj(init='epsg:26915', preserve_units=False)
>>> # projection 2: UTM zone 15, clrk66 ellipse, NAD27 datum
>>> p2 = Proj(init='epsg:26715', preserve_units=False)
>>> # find x,y of Jefferson City, MO.
>>> x1, y1 = p1(-92.199881,38.56694)
>>> # transform this point to projection 2 coordinates.
>>> x2, y2 = transform(p1,p2,x1,y1)
>>> '%9.3f %11.3f' % (x1,y1)
'569704.566 4269024.671'
>>> '%9.3f %11.3f' % (x2,y2)
'569722.342 4268814.028'
>>> '%8.3f %5.3f' % p2(x2,y2,inverse=True)
' -92.200 38.567'
>>> # process 3 points at a time in a tuple
>>> lats = (38.83,39.32,38.75) # Columbia, KC and StL Missouri
>>> lons = (-92.22,-94.72,-90.37)
>>> x1, y1 = p1(lons,lats)
>>> x2, y2 = transform(p1,p2,x1,y1)
>>> xy = x1+y1
>>> '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy
'567703.344 351730.944 728553.093 4298200.739 4353698.725 4292319.005'
>>> xy = x2+y2
>>> '%9.3f %9.3f %9.3f %11.3f %11.3f %11.3f' % xy
'567721.149 351747.558 728569.133 4297989.112 4353489.645 4292106.305'
>>> lons, lats = p2(x2,y2,inverse=True)
>>> xy = lons+lats
>>> '%8.3f %8.3f %8.3f %5.3f %5.3f %5.3f' % xy
' -92.220  -94.720  -90.370 38.830 39.320 38.750'
>>> # test datum shifting, installation of extra datum grid files.
>>> p1 = Proj(proj='latlong',datum='WGS84')
>>> x1 = -111.5; y1 = 45.25919444444
>>> p2 = Proj(proj="utm",zone=10,datum='NAD27', preserve_units=False)
>>> x2, y2 = transform(p1, p2, x1, y1)
>>> "%s  %s" % (str(x2)[:9],str(y2)[:9])
'1402291.0  5076289.5'
>>> from pyproj import CRS
>>> c1 = CRS(proj='latlong',datum='WGS84')
>>> x1 = -111.5; y1 = 45.25919444444
>>> c2 = CRS(proj="utm",zone=10,datum='NAD27')
>>> x2, y2 = transform(c1, c2, x1, y1)
>>> "%s  %s" % (str(x2)[:9],str(y2)[:9])
'1402291.0  5076289.5'
>>> pj = Proj(init="epsg:4214")
>>> pjx, pjy = pj(116.366, 39.867)
>>> xr, yr = transform(pj, Proj(4326), pjx, pjy, radians=True)
>>> "%.3f %.3f" % (xr, yr)
'2.031 0.696'

pyproj.itransform

pyproj.transformer.itransform(p1, p2, points, switch=False, radians=False, errcheck=False)[源代码]

points2=itransform(p1,p2,points1)迭代器/函数pyproj.transform的生成器版本。转换由项目实例p1和p2定义的两个坐标系之间的点。当需要延迟转换大量坐标时(例如从文件读取和处理时),可以使用此函数替代pyproj.transform。点s1是由p1定义的坐标系中坐标x1、y1(、z1)或lon1、lat1(、z1)的可Iterable/生成器。points2是一个迭代器,返回由p2定义的坐标系中的x2、y2(、z2)或lon2、lat2(、z2)坐标的元组。可选择提供Z。

要点1可以是:
  • 元组/元组列表/列表,即对于二维点: [(十一,易),(XJ,YJ),…(XN,YN)]
  • nx3或nx2 2d numpy数组,其中n是点号
  • 用于2D点或(Xi,Yi,Zi)的3D坐标(Xi,Yi)的生成器

如果可选关键字“switch”为真(默认值为假),则X、Y或LON、点的LAT坐标将切换到Y、X或LAT、LON。如果可选关键字“radians”为真(默认值为假),则所有输入和输出坐标将以弧度表示,而不是地理输入/输出投影的默认度数。

示例用法:

>>> from pyproj import Proj, itransform
>>> # projection 1: WGS84
>>> # (defined by epsg code 4326)
>>> p1 = Proj(init='epsg:4326', preserve_units=False)
>>> # projection 2: GGRS87 / Greek Grid
>>> p2 = Proj(init='epsg:2100', preserve_units=False)
>>> # Three points with coordinates lon, lat in p1
>>> points = [(22.95, 40.63), (22.81, 40.53), (23.51, 40.86)]
>>> # transform this point to projection 2 coordinates.
>>> for pt in itransform(p1,p2,points): '%6.3f %7.3f' % pt
'411200.657 4498214.742'
'399210.500 4487264.963'
'458703.102 4523331.451'
>>> pj = Proj(init="epsg:4214")
>>> pjx, pjy = pj(116.366, 39.867)
>>> for pt in itransform(pj, Proj(4326), [(pjx, pjy)], radians=True): '{:.3f} {:.3f}'.format(*pt)
'2.031 0.696'