菜鸟教程小白 发表于 2022-12-12 11:00:28

ios - iOS 中的 GDAL,运行时 dll proj4 不可用,OGR 功能不起作用


                                            <p><p>我在 iOS 上编译的 <code>gdal</code> 有一些问题(<code>gdal</code> 内部使用 <code>proj</code> 进行某些操作)</p>

<p>我正在为 iOS 开发,并且想使用这个库来执行坐标转换,但是有些函数需要 <code>proj dll</code> 并且在运行时我得到这个错误:</p>

<pre><code>ERROR 6: Unable to load PROJ.4 library (libproj.dylib), creation of
OGRCoordinateTransformation failed.
Transformation failed.
</code></pre>

<p>我认为 proj dll 应该作为静态库包含,但我找不到如何执行此操作</p>

<p>(其他问题,顺便提一下:我无法访问 <code>EPSG</code> 数据库和 <code>gcs.csv</code> 也没有,所以只有 <code>SetGeogCS()</code> 方法似乎可用于设置坐标系,但我不知道应该使用哪些参数来获取“<code>EPSG:3003</code>”坐标系,“Italia fuso ovest”)</p>

<pre><code>CLLocationCoordinate2D transform( char *s_srs, double x, double y)

{
    OGRSpatialReference oSourceSRS, oTargetSRS;
    OGRCoordinateTransformation *poCT;

    /* oSourceSRS.importFromEPSG( atoi(papszArgv) );
    //oTargetSRS.importFromEPSG( atoi(papszArgv) ); */

    /*
    oSourceSRS.SetWellKnownGeogCS(s_srs);
    */
    oSourceSRS.SetGeogCS( &#34;My geographic coordinate system&#34;,
                         &#34;WGS_1984&#34;,
                         &#34;My WGS84 Spheroid&#34;,
                         SRS_WGS84_SEMIMAJOR, SRS_WGS84_INVFLATTENING,
                         &#34;Greenwich&#34;, 0.0,
                         &#34;degree&#34;,
                         atof(SRS_UA_DEGREE_CONV) );

    /*
    oTargetSRS.SetWellKnownGeogCS(&#34;WGS84&#34;);
    */
    oTargetSRS.SetGeogCS( &#34;My geographic coordinate system&#34;,
                   &#34;WGS_1984&#34;,
                   &#34;My WGS84 Spheroid&#34;,
                   SRS_WGS84_SEMIMAJOR, SRS_WGS84_INVFLATTENING,
                   &#34;Greenwich&#34;, 0.0,
                   &#34;degree&#34;,
                         atof(SRS_UA_DEGREE_CONV) );


    poCT = OGRCreateCoordinateTransformation( &amp;oSourceSRS,
                                             &amp;oTargetSRS );


    if( poCT == NULL || !poCT-&gt;Transform( 1, &amp;x, &amp;y ) ) {
      printf( &#34;Transformation failed.\n&#34; );
      return CLLocationCoordinate2DMake(x, y);
    } else {
      return CLLocationCoordinate2DMake(x, y);
    }

}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您需要先下载并构建适用于 iOS 的 proj4。然后,您可以使用 ./configure 标志将 GDAL 指向您的 iOS 版本的 proj4 </p>

<pre><code>--with-static-proj4=/path/to/your/libproj
</code></pre>

<p>确保路径是包含 proj4 的 include 目录和 lib 目录的父目录。</p>

<p>例如,我在 Mac 上的目录是:</p>

<pre><code>/Users/myUsername/iOS_builds/{device_arch}/iphoneos.platform/iphoneos.7.0.sdk
</code></pre>

<p>其中 device arch 可以是 i386、armv7 或 armv7s,具体取决于我正在编译的目标。该目录具有“include”和“lib”子目录,它们又具有用于链接到 GDAL 的 .h 文件和 libproj.a 文件。</p>

<p>我正在开发一个脚本,用于帮助在 github 上构建 GDAL 和相关库。 <a href="https://github.com/afarnham/preflight" rel="noreferrer noopener nofollow">https://github.com/afarnham/preflight</a> </p>

<p>如果您没有安装 Xcode 5,您可能需要对该脚本中指定的编译器进行一些编辑才能使其正常工作。此外,一些配置标志可能需要为 GDAL 更新。不过,它应该可以帮助您入门。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - iOS 中的 GDAL,运行时 dll proj4 不可用,OGR 功能不起作用,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16666024/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16666024/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - iOS 中的 GDAL,运行时 dll proj4 不可用,OGR 功能不起作用