如何在 PROJ 库中调用 proj_lp_dist

问题描述

我正在尝试在 PROJ 库 7.2.2 中计算测地线距离。但是,无论我输入什么数据,proj_lp_dist 函数都会返回 Infinity。命令行工具正常工作,但它不会调用相同的 API。 我曾尝试反转 long-lat 值,但这并不能解决问题。

c:\PROJ\build_vs2019\bin\Release>geod +ellps=WGS84 -I
28.472672560770082 -81.466635213256282 37.41439966801741 -122.07673673962702
-64d33'38.315"  92d36'51.975"   3892821.141
        TEST_METHOD(TestDistanceExperimentalReverse)
        {
            wchar_t message[2000];
            SetEnv();

            PJ_CONTEXT* C = proj_context_create();
            Assert::IsNotNull(C,L"Cannot create PROJ context.");

            PJ* P = proj_create(C,"EPSG:4326"/*WGS84*/);
            Assert::IsNotNull(P,L"Cannot create PROJ converter");

            PJ_COORD a,b;
            //Universal Studios,Orlando,Florida
            a = proj_coord(-81.466635213256282,28.472672560770082,0);
            //Computer history Museum,Mountain View,California
            b = proj_coord(-122.07673673962702,37.41439966801741,0);

            double dist = proj_lp_dist(P,a,b);

            swprintf_s(message,L"distance %g\n",dist);
            Logger::WriteMessage(message);

            {
                wchar_t msg[2000];

                int errnum = proj_context_errno(C);
                if (errnum != 0)
                {
                    const char* c = proj_errno_string(errnum);
                    size_t cSize = strlen(c) + 1;
                    mbstowcs_s(&cSize,msg,c,cSize);
                    swprintf_s(message,L"Context state %d %s",errnum,msg);
                    Logger::WriteMessage(message);
                }
            }
            {
                wchar_t msg[2000];
                int errnum = proj_errno(P);
                if (errnum != 0)
                {
                    const char* c = proj_errno_string(errnum);
                    size_t cSize = strlen(c) + 1;
                    mbstowcs_s(&cSize,L"Projection state %d %s",msg);
                    Logger::WriteMessage(message);
                }
            }
            Assert::IsFalse(isnan(dist),L"Distance is NaN");
            Assert::IsFalse(isinf(dist),L"Distance is Infinity");
            Assert::AreEqual(3892821.141,dist);
        };

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)