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

时间:2013-05-21 09:03:14

标签: ios gdal ogr

我在iOS上编译gdal时遇到一些问题(gdal内部使用proj进行某些操作)

我正在为iOS开发,并希望使用此库来执行坐标转换,但某些函数需要proj dll,并且在运行时我收到此错误:

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

我认为proj dll应该作为静态库包含在内,但是我找不到这个怎么样的

(其他问题,仅提及:我无法访问EPSG数据库和gcs.csv,因此只有SetGeogCS()方法似乎可以设置坐标系,我不知道我知道应该使用哪些参数来获得“EPSG:3003”坐标系,“Italia fuso ovest”)

CLLocationCoordinate2D transform( char *s_srs, double x, double y)

{
    OGRSpatialReference oSourceSRS, oTargetSRS;
    OGRCoordinateTransformation *poCT;

    /* oSourceSRS.importFromEPSG( atoi(papszArgv[i+1]) );
    //oTargetSRS.importFromEPSG( atoi(papszArgv[i+2]) ); */

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

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


    poCT = OGRCreateCoordinateTransformation( &oSourceSRS,
                                             &oTargetSRS );


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

}

2 个答案:

答案 0 :(得分:1)

您需要先下载并构建适用于iOS的proj4。然后,您可以使用./configure标志

将GDAL指向您的iOS版本的proj4
--with-static-proj4=/path/to/your/libproj

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

例如我Mac上的目录是:

/Users/myUsername/iOS_builds/{device_arch}/iphoneos.platform/iphoneos.7.0.sdk

设备拱可以是i386,armv7或armv7s,具体取决于我正在编译的目标。该目录的子目录为“include”和“lib”,后者又有.h文件和libproj.a文件,用于链接到GDAL。

我正在开发一个脚本,用于帮助在github上构建GDAL和相关库。 https://github.com/afarnham/preflight

如果您没有安装Xcode 5,可能必须对该脚本中指定的编译器进行一些编辑才能使其正常工作。还有一些配置标志可能需要更新GDAL。它应该可以帮助你开始。

答案 1 :(得分:0)

根据this帖子,您可以通过添加

来解决iOS中的问题
export PROJSO=/Library/Frameworks/PROJ.framework/PROJ

.bash_profile。我在Linux上面临同样的问题,任何建议都表示赞赏:)