变压器¶
这个 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
- proj_from (
-
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
- proj_from (
-
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'
-
static
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'