Есть МСК "Выборг" в формате Mapinfow.prj.
"Выборг", 1008, 1001, 7, 27.95, 0, 1, 250000, -11057.626, 7, 0.999477237, 0.031204196, -485909.751, -0.031204196, 0.999477237, -6699985.630
Утилитой TransCoor геометрии трансформируются корректно.
Нужно программно преобразовать с помощью обратного аффинного преобразования и трансформации СК "Выборг" в формате WKT -> WGS84.
Но программно получается смещение в районе 3-4 км на север. В восточном все нормально.
Функция реафинного преобразования:
Код: Выделить всё
Параметры:  0.999477237, 0.031204196, -485909.751, -0.031204196,  0.999477237,   -6699985.630
public Double[] reAffine(Double[] points, Double[] koeff) {
    double k, kx, ky;
    k  = koeff[0] * koeff[4] - koeff[1] * koeff[3];
    kx = koeff[1] * koeff[5] - koeff[2] * koeff[4];
    ky = koeff[0] * koeff[5] - koeff[2] * koeff[3];
    for (int i = 0; i < points.length; i += 2)
    {
        points[i] = (koeff[4] * points[i] - koeff[1] * points[i + 1] + kx) / k;
        points[i + 1] = -1 * (koeff[3] * points[i] - koeff[0] * points[i + 1] + ky) / k;
    }
    return points;
}
"Выборг", 1008, 1001, 7, 27.95, 0, 1, 250000, -11057.626, 7, 0.999477237, 0.031204196, -485909.751, -0.031204196, 0.999477237, -6699985.630
1001 - датум Pulkovo 1942
Параметры датума:
Pulkovo 1942 : имя датума; KRASSOVSKY: эллипсоид Крассовского; TOWGS84: 24, -123, -94, -0.02, 0.25, 0.13, 1.1
Ед.измерения: метры
5 параметров:
27.95, 0, 1, 250000, -11057.626
Аффинные параметры в WKT не используются, т.к. считаются отдельно.
Код: Выделить всё
WKT:PROJCS["Выборг",
  GEOGCS["MI Custom",
    DATUM["Pulkovo_1942",
      SPHEROID["Krassowsky 1940", 6378245.0, 298.3, AUTHORITY["EPSG","7024"]],
      TOWGS84[24.0, -123.0, -94.0, -0.02, 0.25, 0.13, 1.1]],
    PRIMEM["Greenwich", 0.0],
    UNIT["degree", 0.017453292519943295],
    AXIS["Longitude", EAST],
    AXIS["Latitude", NORTH]],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["central_meridian", 27.95],
  PARAMETER["latitude_of_origin", 0.0],
  PARAMETER["scale_factor", 1.0],
  PARAMETER["false_easting", 250000.0],
  PARAMETER["false_northing", -11057.626],
  UNIT["m", 1.0],
  AXIS["x", EAST],
  AXIS["y", NORTH]]
