PROJ pyproj преобразование точки EPSG 4326 (WSG 84) в (EPSG 28992) - PullRequest
3 голосов
/ 10 июня 2019

Учитывая (долгота, широта) точку (5.068913, 52.067567), я хотел бы преобразовать EPSG 4326 в EPSG 28992, используя pyproj.

Функции Proj и transform в pyproj обе подходят для такой задачи:

Когда я использую функцию Proj, я получаю результат, отличный от 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')

points

1 Ответ

2 голосов
/ 11 июня 2019

Преобразование между

EPSG: 4326

и

EPSG: 28992

требует не только проецирования входных координат, в данном случае используя проекцию Oblique_Stereographic. Это можно сделать с помощью функции Proj ...

... но также выполняет преобразование данных, WGS84 в данные Amersfoort. Это может быть достигнуто только с помощью функции 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 должен считаться правильным.

...