Lambet72 좌표를 위도/경도로 변환하는 알고리즘을 찾고 있습니다. 예를 들어, Lambert72 좌표 148990,169450은 50.83546802746704, 4.354415218851164로 변환해야하지만 알고리즘의 대부분에는 약간의 오프셋이 있습니다 (첨부 파일 참조).Lambert72에서 LatLong으로 C#
이 가까운 내가 찾은 알고리즘 중 하나입니다
,하지만 여전히 오류가 있습니다.누군가 더 좋은 알고리즘을 가지고 있습니까?
static void Lambert72ToLatLong(double x, double y, ref double longitude, ref double latitude)
{
const double n = 0.77164219;
const double F = 1.81329763;
const double thetaFudge = 0.00014204;
const double e = 0.08199189;
const double a = 6378388;
const double xDiff = 150000;
const double yDiff = 5400088.44;
const double theta0 = 0.07604294;
double xReal = xDiff-x;
double yReal = yDiff-y;
double rho = Math.Sqrt(xReal*xReal + yReal * yReal);
double theta = Math.Atan(xReal/-yReal);
longitude = (theta0 + (theta + thetaFudge)/n) * 180/Math.PI;
latitude = 0;
for(int i=0; i<10; ++i)
{
latitude = (2 * Math.Atan(Math.Pow(F * a/rho, 1/n) * Math.Pow((1 + e * Math.Sin(latitude))/(1 - e * Math.Sin(latitude)), e/2))) - Math.PI/2;
}
latitude *= 180/Math.PI;
}
이 오류는 무엇인가요? –
이미지에서 오류를 볼 수 있습니다. 결과는 50,8355 deg - 4,3544 deg 여야하지만 위의 알고리즘을 사용하면 결과는 50,8360 deg - 4,3531 deg입니다. 오류는 거의 보이지 않지만 내 목적에는 충분하지 않습니다. –