2013-05-21 4 views
2

I가 iOS에서 컴파일 gdal 몇 가지 문제 (gdal는 내부적으로 일부 작업에 대한 proj 사용)GDAL은 OGR 기능이 작동하지 않습니다

내가 iOS 용 개발하고, 원하는거야 좌표 변환을 수행하려면이 라이브러리를 사용하지만, 일부 기능은 proj dll을 필요로하며, 실행시에 내가이 오류를 얻을 : 나는의 PROJ의 DLL이 정적 라이브러리로 포함되어야한다고 가정

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

을하지만 난 어떻게 할 일 찾을 수 없습니다 이

(다른 문제들 : 나는 EPSG 데이터베이스와 gcs.csv에 액세스 할 수 없기 때문에 SetGeogCS() 메토가 좌표계를 설정하는 데 사용할 수있는 것 같아요. 어떤 매개 변수를 가져야하는지 알지 못합니다. EPSG:3003 "좌표계"이탈리아 후소의 오 베스트 ")

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); 
    } 

} 
+0

iOS에서 1.10 릴리스를 컴파일하지 못해서 gdal 1.9.2을 사용하고 있습니다. – atrebbi

답변

0

this 포스트에 따르면, 당신은 당신의 .bash_profile

export PROJSO=/Library/Frameworks/PROJ.framework/PROJ 

을 추가하여 아이폰 OS에서 문제를 해결할 수 있습니다. 나는 리눅스에서 같은 문제에 직면 해있다. 어떤 제안이라도 고맙게 생각한다. :)

+0

OSX가 아닌 iOS입니다. 나는 cfg 파일 (extra_cflags -DPROJ_STATIC = 1 매개 변수)의 일부 변경 사항과 정적 라이브러리의 proj 소스를 컴파일하여이 문제를 해결했습니다. – atrebbi

+0

내가 언급 한 다른 문제 (epsg 데이터베이스를 찾을 수 없음)에 대해 다음 행을 추가하여 수정했습니다 : setenv ("GDAL_DATA", [NSBundle mainBundle] .bundlePath.UTF8String, TRUE); – atrebbi

1

iOS 용 proj4를 먼저 다운로드하여 빌드해야한다. 당신의 아이폰 OS는 경로가 proj4의 include 디렉토리와 lib 디렉토리가 상위 디렉토리인지 확인 ./configure 실행 플래그

--with-static-proj4=/path/to/your/libproj 

를 사용 proj4의 구축에 그럼 당신은 GDAL을 가리킬 수 있습니다.

예를 들어 내 Mac에서 내 디렉토리는 다음과 같습니다 디바이스 아치, I386하는 ARMv7 또는 내가 용으로 컴파일하고을 타겟에 따라 armv7s 수 있습니다

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

. 그 디렉토리는 "include"와 "lib"의 하위 디렉토리를 가지고 있으며, 차례대로 .h 파일과 GDAL에 링크하기위한 libproj.a 파일을 가지고 있습니다.

github에 GDAL 및 관련 라이브러리를 구축하는 데 도움이되는 스크립트가 있습니다. https://github.com/afarnham/preflight

Xcode 5가 설치되어 있지 않은 경우 해당 스크립트에서 지정된 컴파일러를 편집하여 작동하게 할 수 있습니다. 또한 일부 구성 플래그는 GDAL에 대한 업데이트가 필요할 수 있습니다. 그래도 시작하는 데 도움이 될 것입니다.

+0

나는 마침내 컴파일을 할 수 있었지만 ... gdal의 이전 릴리즈 (1.9.2)에서만 컴파일을 관리하지 못했습니다. 10.1 – atrebbi