4

给定一个 (lon, lat) 点 (5.068913, 52.067567),我想使用 . 从 EPSG 4326 转换为 EPSG 28992 pyproj

两者中的Proj, 和transform函数pyproj似乎都适合这样的任务:

当我使用该Proj功能时,我得到与 using 不同的结果transform,为什么?

例如

from shapely.geometry import Point
from pyproj import Proj, transform

from matplotlib import pyplot as plt

x1, y1 = 5.068913, 52.067567

in_proj = Proj(init='epsg:4326') 
out_proj = Proj(init='epsg:28992')

point1 = Point(out_proj(x1, y1))
point2 = Point(transform(in_proj, out_proj, x1 ,y1))

print(point1 == point2)

fig, ax = plt.subplots()
x, y = point1.xy
ax.plot(x, y, 'ro')
x, y = point2.xy
ax.plot(x, y, 'ro')

积分

4

1 回答 1

2

之间的转换

每股收益:4326

每股收益:28992

在这种情况下,不仅需要使用 Oblique_Stereographic 投影来投影输入坐标。这可以通过Proj函数来​​完成...

...但也执行基准转换,WGS84 到阿默斯福特基准。这只能通过transform函数来​​完成。请注意,transform它所做的一切Proj加上基准转换。不需要两步转换。

说明已经说过的内容,我们有EPSG:28992以下WKT

PROJCS["Amersfoort / RD New",
    GEOGCS["Amersfoort",
        DATUM["Amersfoort",
            SPHEROID["Bessel 1841",6377397.155,299.1528128,
                AUTHORITY["EPSG","7004"]],
            TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725],
            AUTHORITY["EPSG","6289"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9122"]],
        AUTHORITY["EPSG","4289"]],
    PROJECTION["Oblique_Stereographic"],
    PARAMETER["latitude_of_origin",52.15616055555555],
    PARAMETER["central_meridian",5.38763888888889],
    PARAMETER["scale_factor",0.9999079],
    PARAMETER["false_easting",155000],
    PARAMETER["false_northing",463000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AXIS["X",EAST],
    AXIS["Y",NORTH],
    AUTHORITY["EPSG","28992"]]

字符串

TOWGS84[565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725]

...意味着需要执行数据转换...不能用Proj函数完成,只能用transform.

结论:

假设pyproj您正在使用的安装配置了正确的TOWGS84字符串(并非总是如此),那么transform结果应该是被认为是正确的。

于 2019-06-11T04:25:56.060 回答