Ignore:
Timestamp:
Jun 6, 2016, 3:29:50 PM (8 years ago)
Author:
djay
Message:

Add support for GDAL 2 (base-vect-ops).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/zoo-project/zoo-services/ogr/base-vect-ops/service.c

    r499 r766  
    2626#include "ogr_api.h"
    2727#include "ogr_geometry.h"
     28#if GDAL_VERSION_MAJOR >= 2
     29#include <gdal_priv.h>
     30#endif
    2831
    2932#include "cpl_minixml.h"
     
    4144#include <libxml/xpathInternals.h>
    4245
    43 #include <openssl/sha.h>
     46/*#include <openssl/sha.h>
    4447#include <openssl/hmac.h>
    4548#include <openssl/evp.h>
    4649#include <openssl/bio.h>
    4750#include <openssl/buffer.h>
     51*/
    4852
    4953  void printExceptionReportResponse(maps*,map*);
     
    119123    OGRLayer *poDstLayer;
    120124    const char *oDriver1;
    121     OGRDataSource       *poODS;
     125#if GDAL_VERSION_MAJOR >= 2
     126    GDALDataset *poODS;
     127#else
     128    OGRDataSource *poODS;
     129#endif
    122130    map* tmp=getMapFromMaps(inputs,"InputPolygon","value");
    123131    if(!tmp){
     
    138146    VSILFILE *ifile=VSIFileFromMemBuffer(filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
    139147    VSIFCloseL(ifile);
    140     OGRDataSource* ipoDS = OGRSFDriverRegistrar::Open(filename,FALSE);
     148
     149#if GDAL_VERSION_MAJOR >= 2
     150      GDALDataset *ipoDS =
     151        (GDALDataset*) GDALOpenEx( filename,
     152                                   GDAL_OF_READONLY | GDAL_OF_VECTOR,
     153                                   NULL, NULL, NULL );
     154      GDALDriverManager* poR=GetGDALDriverManager();
     155      GDALDriver          *poDriver = NULL;
     156#else
     157      OGRDataSource* ipoDS =
     158        OGRSFDriverRegistrar::Open(filename,FALSE);
     159      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     160      OGRSFDriver          *poDriver = NULL;
     161#endif
    141162    char pszDestDataSource[100];
    142163    if( ipoDS == NULL )
    143164      {
    144         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    145        
    146165        fprintf( stderr, "FAILURE:\n"
    147166                 "Unable to open datasource `%s' with the following drivers.\n",
     
    150169        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    151170          {
     171#if GDAL_VERSION_MAJOR >= 2
     172            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     173#else
    152174            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     175#endif
    153176          }
    154177        char tmp[1024];
     
    173196       
    174197        OGRFeature  *poFeature;
    175        
    176         OGRSFDriverRegistrar *poR = OGRSFDriverRegistrar::GetRegistrar();
    177         OGRSFDriver          *poDriver = NULL;
     198
    178199        int                  iDriver;
    179200       
     
    192213             iDriver++ )
    193214          {
     215#if GDAL_VERSION_MAJOR >=2
     216            if( EQUAL(poR->GetDriver(iDriver)->GetDescription(),oDriver1) )
     217#else
    194218            if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver1) )
     219#endif
    195220              {
    196221                poDriver = poR->GetDriver(iDriver);
     
    206231            for( iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    207232              {
     233#if GDAL_VERSION_MAJOR >=2
     234                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     235#else
    208236                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     237#endif
    209238              }
    210239           
     
    214243          }
    215244       
    216         if( !poDriver->TestCapability( ODrCCreateDataSource ) ){
    217           char emessage[1024];
    218           sprintf( emessage,  "%s driver does not support data source creation.\n",
    219                    "json" );
    220           setMapInMaps(conf,"lenv","message",emessage);
    221           return SERVICE_FAILED;
    222         }
     245#if GDAL_VERSION_MAJOR >=2
     246        if( !CPLTestBool( CSLFetchNameValueDef(poDriver->GetMetadata(), GDAL_DCAP_CREATE, "FALSE") ) )
     247#else
     248        if( !poDriver->TestCapability( ODrCCreateDataSource ) )
     249#endif
     250          {
     251            char emessage[1024];
     252            sprintf( emessage,  "%s driver does not support data source creation.\n",
     253              "json" );
     254            setMapInMaps(conf,"lenv","message",emessage);
     255            return SERVICE_FAILED;
     256          }
    223257       
    224258        char **papszDSCO=NULL;
     259#if GDAL_VERSION_MAJOR >=2
     260        poODS = poDriver->Create( pszDestDataSource, 0, 0, 0, GDT_Unknown, papszDSCO );
     261#else
    225262        poODS = poDriver->CreateDataSource( pszDestDataSource, papszDSCO );
     263#endif
    226264        if( poODS == NULL ){
    227265          char emessage[1024];     
     
    326364
    327365    OGRCleanupAll();
     366    dumpMaps(outputs);
    328367    return SERVICE_SUCCEEDED;
    329368
    330369}
    331370
    332   int applyOne(maps*& conf,maps*& inputs,maps*& outputs,OGRGeometry* (OGRGeometry::*myFunc)() const,const char* schema){
     371int applyOne(maps*& conf,maps*& inputs,maps*& outputs,OGRGeometry* (OGRGeometry::*myFunc)() const,const char* schema){
    333372    OGRRegisterAll();
    334373
     
    337376    OGRLayer *poDstLayer;
    338377    const char *oDriver1;
    339     OGRDataSource       *poODS;
     378#if GDAL_VERSION_MAJOR >= 2
     379    GDALDataset *poODS;
     380#else
     381    OGRDataSource *poODS;
     382#endif
    340383    map* tmp=getMapFromMaps(inputs,"InputPolygon","value");
    341384    if(!tmp){
     
    356399    VSILFILE *ifile=VSIFileFromMemBuffer(filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
    357400    VSIFCloseL(ifile);
    358     OGRDataSource* ipoDS = OGRSFDriverRegistrar::Open(filename,FALSE);
     401#if GDAL_VERSION_MAJOR >= 2
     402    GDALDataset *ipoDS =
     403      (GDALDataset*) GDALOpenEx( filename,
     404                                 GDAL_OF_READONLY | GDAL_OF_VECTOR,
     405                                 NULL, NULL, NULL );
     406    GDALDriverManager* poR=GetGDALDriverManager();
     407    GDALDriver          *poDriver = NULL;
     408#else
     409    OGRDataSource* ipoDS =
     410      OGRSFDriverRegistrar::Open(filename,FALSE);
     411    OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     412    OGRSFDriver          *poDriver = NULL;
     413#endif
    359414    char pszDestDataSource[100];
    360415    if( ipoDS == NULL )
    361416      {
    362         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    363        
    364417        fprintf( stderr, "FAILURE:\n"
    365418                 "Unable to open datasource `%s' with the following drivers.\n",
    366419                 filename );
    367        
     420        char emessage[1024];   
    368421        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    369422          {
    370             fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     423#if GDAL_VERSION_MAJOR >=2
     424                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     425                fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     426#else
     427                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     428                fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     429#endif
    371430          }
    372431        char tmp[1024];
    373         sprintf(tmp,"Unable to open datasource `%s' with the following drivers.",filename);
     432        sprintf(tmp,"Unable to open datasource `%s' with the following drivers.\n%s",filename,emessage);
    374433        setMapInMaps(conf,"lenv","message",tmp);
    375434        return SERVICE_FAILED;
    376435      }
     436
    377437    for( int iLayer = 0; iLayer < ipoDS->GetLayerCount();
    378438         iLayer++ )
     
    396456        /* -------------------------------------------------------------------- */
    397457       
    398         OGRSFDriverRegistrar *poR = OGRSFDriverRegistrar::GetRegistrar();
    399         OGRSFDriver          *poDriver = NULL;
    400458        int                  iDriver;
    401459       
     
    414472             iDriver++ )
    415473          {
    416             if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver1) )
     474
     475            if( EQUAL(
     476#if GDAL_VERSION_MAJOR >=2
     477                      poR->GetDriver(iDriver)->GetDescription()
     478#else
     479                      poR->GetDriver(iDriver)->GetName()
     480#endif
     481                      ,oDriver1) )
    417482              {
    418483                poDriver = poR->GetDriver(iDriver);
     
    425490            sprintf( emessage, "Unable to find driver `%s'.\n", oDriver );
    426491            sprintf( emessage,  "%sThe following drivers are available:\n",emessage );
    427            
    428             for( iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    429               {
     492            for( iDriver = 0;iDriver < poR->GetDriverCount();iDriver++ )           
     493              {
     494#if GDAL_VERSION_MAJOR >=2
     495                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     496#else
    430497                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     498#endif
    431499              }
    432500           
     
    436504          }
    437505       
    438         if( !poDriver->TestCapability( ODrCCreateDataSource ) ){
     506#if GDAL_VERSION_MAJOR >=2
     507        if( !CPLTestBool( CSLFetchNameValueDef(poDriver->GetMetadata(), GDAL_DCAP_CREATE, "FALSE") ) )
     508#else
     509        if( !poDriver->TestCapability( ODrCCreateDataSource ) )
     510#endif
     511        {
    439512          char emessage[1024];
    440513          sprintf( emessage,  "%s driver does not support data source creation.\n",
     
    449522        //map* tpath=getMapFromMaps(conf,"main","tmpPath");
    450523        char **papszDSCO=NULL;
     524#if GDAL_VERSION_MAJOR >=2
     525        poODS = poDriver->Create( pszDestDataSource, 0, 0, 0, GDT_Unknown, papszDSCO );
     526#else
    451527        poODS = poDriver->CreateDataSource( pszDestDataSource, papszDSCO );
     528#endif
    452529        if( poODS == NULL ){
    453530          char emessage[1024];     
     
    471548          }
    472549       
    473         //CPLErrorReset();
    474550       
    475551        poDstLayer = poODS->CreateLayer( "Result", NULL,wkbUnknown,NULL);
     
    566642    OGRLayer *poDstLayer;
    567643    const char *oDriver1;
    568     OGRDataSource       *poODS;
     644#if GDAL_VERSION_MAJOR >= 2
     645    GDALDataset *poODS;
     646#else
     647    OGRDataSource *poODS;
     648#endif
    569649    map* tmp=getMapFromMaps(inputs,"InputPolygon","value");
    570650    if(!tmp){
     
    585665    VSILFILE *ifile=VSIFileFromMemBuffer(filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
    586666    VSIFCloseL(ifile);
    587     OGRDataSource* ipoDS = OGRSFDriverRegistrar::Open(filename,FALSE);
     667#if GDAL_VERSION_MAJOR >= 2
     668      GDALDataset *ipoDS =
     669        (GDALDataset*) GDALOpenEx( filename,
     670                                   GDAL_OF_READONLY | GDAL_OF_VECTOR,
     671                                   NULL, NULL, NULL );
     672      GDALDriverManager* poR=GetGDALDriverManager();
     673      GDALDriver          *poDriver = NULL;
     674#else
     675      OGRDataSource* ipoDS =
     676        OGRSFDriverRegistrar::Open(filename,FALSE);
     677      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     678      OGRSFDriver          *poDriver = NULL;
     679#endif
    588680    char pszDestDataSource[100];
    589681    if( ipoDS == NULL )
    590682      {
    591         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    592683       
    593684        fprintf( stderr, "FAILURE:\n"
     
    597688        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    598689          {
     690#if GDAL_VERSION_MAJOR >= 2
     691            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     692#else
    599693            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     694#endif
    600695          }
    601696        char tmp[1024];
     
    625720        /* -------------------------------------------------------------------- */
    626721       
    627         OGRSFDriverRegistrar *poR = OGRSFDriverRegistrar::GetRegistrar();
    628         OGRSFDriver          *poDriver = NULL;
    629722        int                  iDriver;
    630723       
     
    643736             iDriver++ )
    644737          {
     738#if GDAL_VERSION_MAJOR >=2
     739            if( EQUAL(poR->GetDriver(iDriver)->GetDescription(),oDriver1) )
     740#else
    645741            if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver1) )
     742#endif
    646743              {
    647744                poDriver = poR->GetDriver(iDriver);
     
    657754            for( iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    658755              {
     756#if GDAL_VERSION_MAJOR >=2
     757                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     758#else
    659759                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     760#endif
    660761              }
    661762           
     
    665766          }
    666767       
    667         if( !poDriver->TestCapability( ODrCCreateDataSource ) ){
     768#if GDAL_VERSION_MAJOR >=2
     769        if( !CPLTestBool( CSLFetchNameValueDef(poDriver->GetMetadata(), GDAL_DCAP_CREATE, "FALSE") ) )
     770#else
     771        if( !poDriver->TestCapability( ODrCCreateDataSource ) )
     772#endif
     773        {
    668774          char emessage[1024];
    669775          sprintf( emessage,  "%s driver does not support data source creation.\n",
     
    678784        //map* tpath=getMapFromMaps(conf,"main","tmpPath");
    679785        char **papszDSCO=NULL;
     786#if GDAL_VERSION_MAJOR >=2
     787        poODS = poDriver->Create( pszDestDataSource, 0, 0, 0, GDT_Unknown, papszDSCO );
     788#else
    680789        poODS = poDriver->CreateDataSource( pszDestDataSource, papszDSCO );
     790#endif
    681791        if( poODS == NULL ){
    682792          char emessage[1024];     
     
    779889  __declspec(dllexport)
    780890#endif
    781   int Boundary(maps*& conf,maps*& inputs,maps*& outputs){
    782     return applyOne(conf,inputs,outputs,&OGRGeometry::Boundary,"http://fooa/gml/3.1.0/polygon.xsd");
    783   }
    784 
    785 #ifdef WIN32
    786   __declspec(dllexport)
    787 #endif
    788   int ConvexHull(maps*& conf,maps*& inputs,maps*& outputs){
    789     return applyOne(conf,inputs,outputs,&OGRGeometry::ConvexHull,"http://fooa/gml/3.1.0/polygon.xsd");
    790   }
    791 
    792 
    793   OGRDataSource* loadEntity(maps* conf,maps* inputs,char **filename,const char **oDriver,const char *entity,int iter){
    794     map* tmp=getMapFromMaps(inputs,entity,"value");
    795     map* tmp1=getMapFromMaps(inputs,entity,"mimeType");
    796     *oDriver="GeoJSON";
    797     sprintf(*filename,"/vsimem/input_%d.json",getpid()+iter);
    798     if(tmp1!=NULL){
    799       if(strcmp(tmp1->value,"text/xml")==0){
    800         sprintf(*filename,"/vsimem/input_%d.xml",getpid()+iter);
    801         *oDriver="GML";
    802       }
    803     }
    804     VSILFILE *ifile=VSIFileFromMemBuffer(*filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
    805     VSIFCloseL(ifile);
    806     return OGRSFDriverRegistrar::Open(*filename,FALSE);   
    807   }
    808 
    809   int applyOneBool(maps*& conf,maps*& inputs,maps*& outputs,OGRBoolean (OGRGeometry::*myFunc)() const){
    810 #ifdef DEBUG
    811     fprintf(stderr,"\nService internal print\n");
    812 #endif
     891int Centroid(maps*& conf,maps*& inputs,maps*& outputs){
    813892    OGRRegisterAll();
    814893
     
    817896    OGRLayer *poDstLayer;
    818897    const char *oDriver1;
    819     OGRDataSource       *poODS;
    820 #ifdef DEBUG
    821     dumpMaps(cursor);
     898#if GDAL_VERSION_MAJOR >= 2
     899    GDALDataset *poODS;
     900#else
     901    OGRDataSource *poODS;
    822902#endif
    823903    map* tmp=getMapFromMaps(inputs,"InputPolygon","value");
     
    839919    VSILFILE *ifile=VSIFileFromMemBuffer(filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
    840920    VSIFCloseL(ifile);
    841     OGRDataSource* ipoDS = OGRSFDriverRegistrar::Open(filename,FALSE);
     921#if GDAL_VERSION_MAJOR >= 2
     922      GDALDataset *ipoDS =
     923        (GDALDataset*) GDALOpenEx( filename,
     924                                   GDAL_OF_READONLY | GDAL_OF_VECTOR,
     925                                   NULL, NULL, NULL );
     926      GDALDriverManager* poR=GetGDALDriverManager();
     927      GDALDriver          *poDriver = NULL;
     928#else
     929      OGRDataSource* ipoDS =
     930        OGRSFDriverRegistrar::Open(filename,FALSE);
     931      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     932      OGRSFDriver          *poDriver = NULL;
     933#endif
    842934    char pszDestDataSource[100];
    843935    if( ipoDS == NULL )
    844936      {
    845         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    846937       
    847938        fprintf( stderr, "FAILURE:\n"
     
    851942        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    852943          {
     944#if GDAL_VERSION_MAJOR >= 2
     945            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     946#else
    853947            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     948#endif
     949          }
     950        char tmp[1024];
     951        sprintf(tmp,"Unable to open datasource `%s' with the following drivers.",filename);
     952        setMapInMaps(conf,"lenv","message",tmp);
     953        return SERVICE_FAILED;
     954      }
     955    for( int iLayer = 0; iLayer < ipoDS->GetLayerCount();
     956         iLayer++ )
     957      {
     958        OGRLayer        *poLayer = ipoDS->GetLayer(iLayer);
     959       
     960        if( poLayer == NULL )
     961          {
     962            fprintf( stderr, "FAILURE: Couldn't fetch advertised layer %d!\n",
     963                     iLayer );
     964            char tmp[1024];
     965            sprintf(tmp,"Couldn't fetch advertised layer %d!",iLayer);
     966            setMapInMaps(conf,"lenv","message",tmp);
     967            return SERVICE_FAILED;
     968          }
     969       
     970        OGRFeature  *poFeature;
     971
     972        /* -------------------------------------------------------------------- */
     973        /*      Try opening the output datasource as an existing, writable      */
     974        /* -------------------------------------------------------------------- */
     975       
     976        int                  iDriver;
     977       
     978        map* tmpMap=getMapFromMaps(outputs,"Result","mimeType");
     979        oDriver1="GeoJSON";
     980        sprintf(pszDestDataSource,"/vsimem/result_%d.json",getpid());
     981        if(tmpMap!=NULL){
     982          if(strcmp(tmpMap->value,"text/xml")==0){
     983            sprintf(pszDestDataSource,"/vsimem/result_%d.xml",getpid());
     984            oDriver1="GML";
     985          }
     986        }
     987       
     988        for( iDriver = 0;
     989             iDriver < poR->GetDriverCount() && poDriver == NULL;
     990             iDriver++ )
     991          {
     992#if GDAL_VERSION_MAJOR >=2
     993            if( EQUAL(poR->GetDriver(iDriver)->GetDescription(),oDriver1) )
     994#else
     995            if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver1) )
     996#endif
     997              {
     998                poDriver = poR->GetDriver(iDriver);
     999              }
     1000          }
     1001       
     1002        if( poDriver == NULL )
     1003          {
     1004            char emessage[8192];
     1005            sprintf( emessage, "Unable to find driver `%s'.\n", oDriver );
     1006            sprintf( emessage,  "%sThe following drivers are available:\n",emessage );
     1007           
     1008            for( iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
     1009              {
     1010#if GDAL_VERSION_MAJOR >=2
     1011                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     1012#else
     1013                sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     1014#endif
     1015              }
     1016           
     1017            setMapInMaps(conf,"lenv","message",emessage);
     1018            return SERVICE_FAILED;
     1019           
     1020          }
     1021       
     1022#if GDAL_VERSION_MAJOR >=2
     1023        if( !CPLTestBool( CSLFetchNameValueDef(poDriver->GetMetadata(), GDAL_DCAP_CREATE, "FALSE") ) )
     1024#else
     1025        if( !poDriver->TestCapability( ODrCCreateDataSource ) )
     1026#endif
     1027        {
     1028          char emessage[1024];
     1029          sprintf( emessage,  "%s driver does not support data source creation.\n",
     1030                   "json" );
     1031          setMapInMaps(conf,"lenv","message",emessage);
     1032          return SERVICE_FAILED;
     1033        }
     1034       
     1035        /* -------------------------------------------------------------------- */
     1036        /*      Create the output data source.                                  */
     1037        /* -------------------------------------------------------------------- */
     1038        //map* tpath=getMapFromMaps(conf,"main","tmpPath");
     1039        char **papszDSCO=NULL;
     1040#if GDAL_VERSION_MAJOR >=2
     1041        poODS = poDriver->Create( pszDestDataSource, 0, 0, 0, GDT_Unknown, papszDSCO );
     1042#else
     1043        poODS = poDriver->CreateDataSource( pszDestDataSource, papszDSCO );
     1044#endif
     1045        if( poODS == NULL ){
     1046          char emessage[1024];     
     1047          sprintf( emessage,  "%s driver failed to create %s\n",
     1048                   "json", pszDestDataSource );
     1049          setMapInMaps(conf,"lenv","message",emessage);
     1050          return SERVICE_FAILED;
     1051        }
     1052       
     1053        /* -------------------------------------------------------------------- */
     1054        /*      Create the layer.                                               */
     1055        /* -------------------------------------------------------------------- */
     1056        if( !poODS->TestCapability( ODsCCreateLayer ) )
     1057          {
     1058            char emessage[1024];
     1059            sprintf( emessage,
     1060                     "Layer %s not found, and CreateLayer not supported by driver.",
     1061                     "Result" );
     1062            setMapInMaps(conf,"lenv","message",emessage);
     1063            return SERVICE_FAILED;
     1064          }
     1065
     1066        poDstLayer = poODS->CreateLayer( "Result", NULL,wkbUnknown,NULL);
     1067        if( poDstLayer == NULL ){
     1068          setMapInMaps(conf,"lenv","message","Layer creation failed.\n");
     1069          return SERVICE_FAILED;
     1070        }
     1071       
     1072        OGRFeatureDefn *poFDefn = poLayer->GetLayerDefn();
     1073        int iField;
     1074        int hasMmField=0;
     1075       
     1076        for( iField = 0; iField < poFDefn->GetFieldCount(); iField++ )
     1077          {
     1078            OGRFieldDefn *tmp=poFDefn->GetFieldDefn(iField);
     1079            if (iField >= 0)
     1080                poDstLayer->CreateField( poFDefn->GetFieldDefn(iField) );
     1081            else
     1082            {
     1083                fprintf( stderr, "Field '%s' not found in source layer.\n",
     1084                        iField );
     1085                return SERVICE_FAILED;
     1086            }
     1087          }
     1088
     1089        while(TRUE){
     1090          OGRFeature      *poDstFeature = NULL;
     1091          poFeature = poLayer->GetNextFeature();
     1092          if( poFeature == NULL )
     1093            break;
     1094          if(poFeature->GetGeometryRef() != NULL){
     1095            poDstFeature = OGRFeature::CreateFeature( poDstLayer->GetLayerDefn() );
     1096            if( poDstFeature->SetFrom( poFeature, TRUE ) != OGRERR_NONE )
     1097              {
     1098                char tmpMsg[1024];
     1099                sprintf( tmpMsg,"Unable to translate feature %ld from layer %s.\n",
     1100                         poFeature->GetFID(), poFDefn->GetName() );
     1101               
     1102                OGRFeature::DestroyFeature( poFeature );
     1103                OGRFeature::DestroyFeature( poDstFeature );
     1104                return SERVICE_FAILED;
     1105              }
     1106            OGRPoint* poPoint=new OGRPoint();
     1107            poDstFeature->GetGeometryRef()->Centroid(poPoint);
     1108            if(poDstFeature->SetGeometryDirectly(poPoint)!= OGRERR_NONE ){
     1109              char tmpMsg[1024];
     1110              sprintf( tmpMsg,"Unable to translate feature %ld from layer %s.\n",
     1111                       poFeature->GetFID(), poFDefn->GetName() );
     1112             
     1113              OGRFeature::DestroyFeature( poFeature );
     1114              OGRFeature::DestroyFeature( poDstFeature );
     1115              return SERVICE_FAILED;
     1116            }
     1117            OGRFeature::DestroyFeature( poFeature );
     1118            if( poDstLayer->CreateFeature( poDstFeature ) != OGRERR_NONE )
     1119              {         
     1120                OGRFeature::DestroyFeature( poDstFeature );
     1121                return SERVICE_FAILED;
     1122              }
     1123            OGRFeature::DestroyFeature( poDstFeature );
     1124          }
     1125        }
     1126
     1127      }
     1128
     1129    delete poODS;
     1130    delete ipoDS;
     1131
     1132    char *res1=readVSIFile(conf,pszDestDataSource);
     1133    if(res1==NULL)
     1134      return SERVICE_FAILED;
     1135    setMapInMaps(outputs,"Result","value",res1);
     1136    free(res1);
     1137
     1138    OGRCleanupAll();
     1139    return SERVICE_SUCCEEDED;
     1140
     1141}
     1142
     1143#ifdef WIN32
     1144  __declspec(dllexport)
     1145#endif
     1146  int Boundary(maps*& conf,maps*& inputs,maps*& outputs){
     1147    return applyOne(conf,inputs,outputs,&OGRGeometry::Boundary,"http://fooa/gml/3.1.0/polygon.xsd");
     1148  }
     1149
     1150#ifdef WIN32
     1151  __declspec(dllexport)
     1152#endif
     1153  int ConvexHull(maps*& conf,maps*& inputs,maps*& outputs){
     1154    return applyOne(conf,inputs,outputs,&OGRGeometry::ConvexHull,"http://fooa/gml/3.1.0/polygon.xsd");
     1155  }
     1156
     1157#if GDAL_VERSION_MAJOR >= 2
     1158GDALDataset*
     1159#else
     1160OGRDataSource*
     1161#endif
     1162  loadEntity(maps* conf,maps* inputs,char **filename,const char **oDriver,const char *entity,int iter){
     1163    map* tmp=getMapFromMaps(inputs,entity,"value");
     1164    map* tmp1=getMapFromMaps(inputs,entity,"mimeType");
     1165    *oDriver="GeoJSON";
     1166    sprintf(*filename,"/vsimem/input_%d.json",getpid()+iter);
     1167    if(tmp1!=NULL){
     1168      if(strcmp(tmp1->value,"text/xml")==0){
     1169        sprintf(*filename,"/vsimem/input_%d.xml",getpid()+iter);
     1170        *oDriver="GML";
     1171      }
     1172    }
     1173    VSILFILE *ifile=VSIFileFromMemBuffer(*filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
     1174    VSIFCloseL(ifile);
     1175#if GDAL_VERSION_MAJOR >= 2
     1176    return (GDALDataset*) GDALOpenEx( *filename,
     1177                                      GDAL_OF_READONLY | GDAL_OF_VECTOR,
     1178                                      NULL, NULL, NULL );
     1179#else
     1180    return OGRSFDriverRegistrar::Open(*filename,FALSE);   
     1181#endif
     1182  }
     1183
     1184  int applyOneBool(maps*& conf,maps*& inputs,maps*& outputs,OGRBoolean (OGRGeometry::*myFunc)() const){
     1185#ifdef DEBUG
     1186    fprintf(stderr,"\nService internal print\n");
     1187#endif
     1188    OGRRegisterAll();
     1189
     1190    maps* cursor=inputs;
     1191    OGRGeometryH geometry,res;
     1192    OGRLayer *poDstLayer;
     1193    const char *oDriver1;
     1194    OGRDataSource       *poODS;
     1195#ifdef DEBUG
     1196    dumpMaps(cursor);
     1197#endif
     1198    map* tmp=getMapFromMaps(inputs,"InputPolygon","value");
     1199    if(!tmp){
     1200      setMapInMaps(conf,"lenv","message",_ss("Unable to parse the input geometry from InputPolygon"));
     1201      return SERVICE_FAILED;
     1202    }
     1203    char filename[1024];
     1204    map* tmp1=getMapFromMaps(inputs,"InputPolygon","mimeType");
     1205    const char *oDriver;
     1206    oDriver="GeoJSON";
     1207    sprintf(filename,"/vsimem/input_%d.json",getpid());
     1208    if(tmp1!=NULL){
     1209      if(strcmp(tmp1->value,"text/xml")==0){
     1210        sprintf(filename,"/vsimem/input_%d.xml",getpid());
     1211        oDriver="GML";
     1212      }
     1213    }
     1214    VSILFILE *ifile=VSIFileFromMemBuffer(filename,(GByte*)tmp->value,strlen(tmp->value),FALSE);
     1215    VSIFCloseL(ifile);
     1216
     1217#if GDAL_VERSION_MAJOR >= 2
     1218      GDALDataset *ipoDS =
     1219        (GDALDataset*) GDALOpenEx( filename,
     1220                                   GDAL_OF_READONLY | GDAL_OF_VECTOR,
     1221                                   NULL, NULL, NULL );
     1222      GDALDriverManager* poR=GetGDALDriverManager();
     1223      GDALDriver          *poDriver = NULL;
     1224#else
     1225      OGRDataSource* ipoDS =
     1226        OGRSFDriverRegistrar::Open(filename,FALSE);
     1227      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     1228      OGRSFDriver          *poDriver = NULL;
     1229#endif
     1230    char pszDestDataSource[100];
     1231    if( ipoDS == NULL )
     1232      {
     1233        fprintf( stderr, "FAILURE:\n"
     1234                 "Unable to open datasource `%s' with the following drivers.\n",
     1235                 filename );
     1236       
     1237        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
     1238          {
     1239#if GDAL_VERSION_MAJOR >= 2
     1240            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     1241#else
     1242            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     1243#endif
    8541244          }
    8551245        char tmp[1024];
     
    9331323    OGRLayer *poDstLayer;
    9341324    //const char *oDriver1;
    935     OGRDataSource       *poODS;
    9361325#ifdef DEBUG
    9371326    dumpMaps(cursor);
     
    9401329    char *filename=(char*)malloc(1024*sizeof(char));
    9411330    const char *oDriver1;
    942     OGRDataSource* ipoDS1 = loadEntity(conf,inputs,&filename,&oDriver1,"InputEntity1",1);
    943 
     1331#if GDAL_VERSION_MAJOR >= 2
     1332    GDALDataset*
     1333#else
     1334    OGRDataSource*
     1335#endif
     1336      ipoDS1 = loadEntity(conf,inputs,&filename,&oDriver1,"InputEntity1",1);
    9441337    char *filename1=(char*)malloc(1024*sizeof(char));
    9451338    const char *oDriver2;
    946     OGRDataSource* ipoDS2 = loadEntity(conf,inputs,&filename1,&oDriver2,"InputEntity2",2);
     1339#if GDAL_VERSION_MAJOR >= 2
     1340    GDALDataset*
     1341#else
     1342    OGRDataSource*
     1343#endif
     1344      ipoDS2 = loadEntity(conf,inputs,&filename1,&oDriver2,"InputEntity2",2);
    9471345    const char *oDriver3;
    9481346    char pszDestDataSource[100];
     1347#if GDAL_VERSION_MAJOR >= 2
     1348      GDALDriverManager* poR=GetGDALDriverManager();
     1349      GDALDriver          *poDriver = NULL;
     1350      GDALDataset *poODS;
     1351#else
     1352      OGRDataSource       *poODS;
     1353      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     1354      OGRSFDriver          *poDriver = NULL;
     1355#endif
    9491356    if( ipoDS1 == NULL || ipoDS2 == NULL )
    9501357      {
    951         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    9521358       
    9531359        fprintf( stderr, "FAILURE:\n"
     
    9571363        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    9581364          {
     1365#if GDAL_VERSION_MAJOR >= 2
     1366            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     1367#else
    9591368            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     1369#endif
    9601370          }
    9611371        char tmp[1024];
     
    10031413            /* -------------------------------------------------------------------- */
    10041414           
    1005             OGRSFDriverRegistrar *poR = OGRSFDriverRegistrar::GetRegistrar();
    1006             OGRSFDriver          *poDriver = NULL;
    10071415            int                  iDriver;
    10081416           
     
    10211429                 iDriver++ )
    10221430              {
    1023 #ifdef DEBUG
    1024                 fprintf(stderr,"D:%s\n",poR->GetDriver(iDriver)->GetName());
    1025 #endif
    1026                 if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver3) )
     1431#if GDAL_VERSION_MAJOR >=2
     1432                if( EQUAL(poR->GetDriver(iDriver)->GetDescription(),oDriver1) )
     1433#else
     1434                if( EQUAL(poR->GetDriver(iDriver)->GetName(),oDriver1) )
     1435#endif
    10271436                  {
    10281437                    poDriver = poR->GetDriver(iDriver);
     
    10381447                for( iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    10391448                  {
     1449#if GDAL_VERSION_MAJOR >= 2
     1450                    sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetDescription() );
     1451#else
    10401452                    sprintf( emessage,  "%s  -> `%s'\n", emessage, poR->GetDriver(iDriver)->GetName() );
     1453#endif
    10411454                  }
    10421455               
     
    10461459              }
    10471460           
    1048             if( !poDriver->TestCapability( ODrCCreateDataSource ) ){
    1049               char emessage[1024];
    1050               sprintf( emessage,  "%s driver does not support data source creation.\n",
    1051                        "json" );
    1052               setMapInMaps(conf,"lenv","message",emessage);
    1053               return SERVICE_FAILED;
    1054             }
     1461#if GDAL_VERSION_MAJOR >= 2
     1462            if( !CPLTestBool( CSLFetchNameValueDef(poDriver->GetMetadata(), GDAL_DCAP_CREATE, "FALSE") ) )
     1463#else
     1464            if( !poDriver->TestCapability( ODrCCreateDataSource ) )
     1465#endif
     1466              {
     1467                char emessage[1024];
     1468                sprintf( emessage,  "%s driver does not support data source creation.\n",
     1469                         "json" );
     1470                setMapInMaps(conf,"lenv","message",emessage);
     1471                return SERVICE_FAILED;
     1472              }
    10551473           
    10561474            /* -------------------------------------------------------------------- */
     
    10591477            //map* tpath=getMapFromMaps(conf,"main","tmpPath");
    10601478            char **papszDSCO=NULL;
     1479#if GDAL_VERSION_MAJOR >= 2
     1480            poODS = poDriver->Create( pszDestDataSource, 0, 0, 0, GDT_Unknown, papszDSCO );
     1481#else
    10611482            poODS = poDriver->CreateDataSource( pszDestDataSource, papszDSCO );
     1483#endif
    10621484            if( poODS == NULL ){
    10631485              char emessage[1024];     
     
    12041626    OGRGeometryH geometry,res;
    12051627    OGRLayer *poDstLayer;
    1206     OGRDataSource       *poODS;
     1628#if GDAL_VERSION_MAJOR >= 2
     1629    GDALDataset *poODS;
     1630#else
     1631    OGRDataSource *poODS;
     1632#endif
    12071633
    12081634    char *filename=(char*)malloc(1024*sizeof(char));
    12091635    const char *oDriver1;
    1210     OGRDataSource* ipoDS1 = loadEntity(conf,inputs,&filename,&oDriver1,"InputEntity1",1);
     1636#if GDAL_VERSION_MAJOR >= 2
     1637    GDALDataset*
     1638#else
     1639    OGRDataSource*
     1640#endif
     1641      ipoDS1 = loadEntity(conf,inputs,&filename,&oDriver1,"InputEntity1",1);
    12111642
    12121643    char *filename1=(char*)malloc(1024*sizeof(char));
    12131644    const char *oDriver2;
    1214     OGRDataSource* ipoDS2 = loadEntity(conf,inputs,&filename1,&oDriver2,"InputEntity2",2);
     1645#if GDAL_VERSION_MAJOR >= 2
     1646    GDALDataset*
     1647#else
     1648    OGRDataSource*
     1649#endif
     1650      ipoDS2 = loadEntity(conf,inputs,&filename1,&oDriver2,"InputEntity2",2);
    12151651    const char *oDriver3;
    12161652    char pszDestDataSource[100];
     1653#if GDAL_VERSION_MAJOR >= 2
     1654      GDALDriverManager* poR=GetGDALDriverManager();
     1655      GDALDriver          *poDriver = NULL;
     1656#else
     1657      OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
     1658      OGRSFDriver          *poDriver = NULL;
     1659#endif
     1660
    12171661    if( ipoDS1 == NULL || ipoDS2 == NULL )
    12181662      {
    1219         OGRSFDriverRegistrar    *poR = OGRSFDriverRegistrar::GetRegistrar();
    1220        
    12211663        fprintf( stderr, "FAILURE:\n"
    12221664                 "Unable to open datasource `%s' with the following drivers.\n",
     
    12251667        for( int iDriver = 0; iDriver < poR->GetDriverCount(); iDriver++ )
    12261668          {
     1669#if GDAL_VERSION_MAJOR >= 2
     1670            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetDescription() );
     1671#else
    12271672            fprintf( stderr, "  -> %s\n", poR->GetDriver(iDriver)->GetName() );
     1673#endif
    12281674          }
    12291675        char tmp[1024];
Note: See TracChangeset for help on using the changeset viewer.

Search

Context Navigation

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png