Example #1
0
 protected function createNewLayer($map, $driver, $layerName, $geoType, $bSearchSpatialRef)
 {
     $spatialRef = NULL;
     // Looking for spatial référence handle
     if ($bSearchSpatialRef === true) {
         $shpFile = dirname(__FILE__) . "\\shp\\";
         if (!isset($this->driverSHP)) {
             // looking for MapInfo driver
             for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
                 if (!strcasecmp(OGR_DR_GetName(OGRGetDriver($iDriver)), 'ESRI Shapefile')) {
                     $this->driverSHP = OGRGetDriver($iDriver);
                     break;
                 }
             }
         }
         if (isset($this->driverSHP)) {
             // reading layer pojection
             if ($map) {
                 $layerSrc = $map->getLayerByName($layerName);
                 $proj = $layerSrc->getProjection();
                 if (empty($proj)) {
                     $proj = $map->getProjection();
                 }
                 if (!empty($proj)) {
                     $pos = strpos($proj, 'epsg:');
                     if ($pos !== false) {
                         $proj = substr($proj, $pos + 5);
                         $shpFile .= "{$proj}.shp";
                     }
                 }
             }
             // if MapInfo file with same pojection exists
             if (file_exists($shpFile) && !is_dir($shpFile)) {
                 // opening file with OGR and reading OGR projection
                 $projDataSource = ogr_dr_open($this->driverSHP, $shpFile, 0);
                 if ($projDataSource && OGR_DS_GetLayerCount($projDataSource) > 0) {
                     $layer = OGR_DS_GetLayer($projDataSource, 0);
                     if ($layer) {
                         $spatialRef = OGR_L_GetSpatialRef($layer);
                     }
                 }
             }
         }
     }
     $layerDest = OGR_DS_CreateLayer($driver, $layerName, $spatialRef, $geoType, NULL);
     return $layerDest;
 }
function OGRCCreate($strFname)
{
    /* Register all OGR drivers */
    OGRRegisterAll();
    /* Fetch MITAB driver - we want to create a TAB file */
    $numDrivers = OGRGetDriverCount();
    printf("nombre drivers = %d\n", $numDrivers);
    for ($i = 0; $i < $numDrivers; $i++) {
        $hdriver = OGRGetDriver($i);
        if (OGR_Dr_GetName($hdriver) == "MapInfo File") {
            printf("Driver name = %s driver number = %d\n", OGR_Dr_GetName($hdriver), $i);
            break;
            /* Found it! */
        }
        $hdriver = NULL;
    }
    if (!$hdriver) {
        printf("Driver not found!\n");
        return -1;
    }
    /* Create new file using this driver */
    /*Uncomment and add options here. */
    /* $aoptions[0] = 'option1';
        $aoptions[1] = 'option2';
        $hdatasource = OGR_Dr_CreateDataSource($hdriver, $strFname, $aoptions);
    */
    /* Or use no option.*/
    $hdatasource = OGR_Dr_CreateDataSource($hdriver, $strFname, NULL);
    if ($hdatasource == NULL) {
        printf("Unable to create %s\n", $strFname);
        return -1;
    }
    /* MapInfo data sources are created with one empty layer corresponding 
       to the $strFname that was passed to the OGR_Dr_CreateDataSource() call.
       Fetch this layer handle now. */
    $hlayer = OGR_DS_GetLayer($hdatasource, 0);
    if ($hlayer == NULL) {
        printf("Unable to create new layer in %s\n", $strFname);
        return -1;
    }
    /* Add a few fields to the layer defn */
    $hfieldDefn = OGR_Fld_Create("id", OFTInteger);
    $eErr = OGR_L_CreateField($hlayer, $hfieldDefn, 0);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $hfieldDefn = OGR_Fld_Create("area", OFTReal);
    $eErr = OGR_L_CreateField($hlayer, $hfieldDefn, 0);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $hfieldDefn = OGR_Fld_Create("name", OFTString);
    $eErr = OGR_L_CreateField($hlayer, $hfieldDefn, 0);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    /* We'll need the layerDefn handle to create new features in this layer */
    $hlayerDefn = OGR_L_GetLayerDefn($hlayer);
    /* Create a new point */
    $hfeature = OGR_F_Create($hlayerDefn);
    OGR_F_SetFieldInteger($hfeature, 0, 1);
    OGR_F_SetFieldDouble($hfeature, 1, 123.45);
    OGR_F_SetFieldString($hfeature, 2, "Feature #1");
    $hgeometry = OGR_G_CreateGeometry(wkbPoint);
    OGR_G_SetPoint($hgeometry, 0, 123.45, 456.78, 0);
    $eErr = OGR_F_SetGeometry($hfeature, $hgeometry);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $eErr = OGR_L_CreateFeature($hlayer, $hfeature);
    if ($eErr != OGRERR_NONE) {
        printf("Error trapped");
        return $eErr;
    }
    /* Create a new line */
    $hfeature = OGR_F_Create($hlayerDefn);
    OGR_F_SetFieldInteger($hfeature, 0, 2);
    OGR_F_SetFieldDouble($hfeature, 1, 42.45);
    OGR_F_SetFieldString($hfeature, 2, "Feature #2");
    $hgeometry = OGR_G_CreateGeometry(wkbLineString);
    OGR_G_AddPoint($hgeometry, 123.45, 456.78, 0);
    OGR_G_AddPoint($hgeometry, 12.34, 45.67, 0);
    $eErr = OGR_F_SetGeometry($hfeature, $hgeometry);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $eErr = OGR_L_CreateFeature($hlayer, $hfeature);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    /* Create a new polygon (square) */
    $hfeature = OGR_F_Create($hlayerDefn);
    OGR_F_SetFieldInteger($hfeature, 0, 3);
    OGR_F_SetFieldDouble($hfeature, 1, 49.71);
    OGR_F_SetFieldString($hfeature, 2, "Feature #3");
    $hgeometry = OGR_G_CreateGeometry(wkbPolygon);
    $hring = OGR_G_CreateGeometry(wkbLinearRing);
    OGR_G_AddPoint($hring, 123.45, 456.78, 0);
    OGR_G_AddPoint($hring, 12.34, 456.78, 0);
    OGR_G_AddPoint($hring, 12.34, 45.67, 0);
    OGR_G_AddPoint($hring, 123.45, 45.67, 0);
    OGR_G_AddPoint($hring, 123.45, 456.78, 0);
    $eErr = OGR_G_AddGeometry($hgeometry, $hring);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $eErr = OGR_F_SetGeometry($hfeature, $hgeometry);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    $eErr = OGR_L_CreateFeature($hlayer, $hfeature);
    if ($eErr != OGRERR_NONE) {
        return $eErr;
    }
    /* Close data source */
    OGR_DS_Destroy($hdatasource);
    return OGRERR_NONE;
}
function TranslateLayer($hSrcDS, $hSrcLayer, $hDstDS, $amAttributeIn)
{
    /* -------------------------------------------------------------------- */
    /*      Create the layer.                                               */
    /* -------------------------------------------------------------------- */
    if (!OGR_DS_TestCapability($hDstDS, ODsCCreateLayer)) {
        printf("%s data source does not support layer creation.\n", OGR_DS_GetName($hDstDS));
        return OGRERR_FAILURE;
    }
    $hFDefn = OGR_L_GetLayerDefn($hSrcLayer);
    /* MapInfo data sources are created with one empty layer corresponding 
       to the $strFname that was passed to the OGR_Dr_CreateDataSource() call.
       Fetch this layer handle now. */
    $hDstLayer = OGR_DS_GetLayer($hDstDS, 0);
    if ($hDstLayer == NULL) {
        return FALSE;
    }
    $iFieldCount = OGR_FD_GetFieldCount($hFDefn);
    printf("field count =%d\n", $iFieldCount);
    /* -------------------------------------------------------------------- */
    /*      Add fields.                                                     */
    /* -------------------------------------------------------------------- */
    for ($iField = 0; $iField < $iFieldCount; $iField++) {
        if (OGR_L_CreateField($hDstLayer, OGR_FD_GetFieldDefn($hFDefn, $iField), 0) != OGRERR_NONE) {
            return FALSE;
        }
    }
    /* -------------------------------------------------------------------- */
    /*      Transfer features.                                              */
    /* -------------------------------------------------------------------- */
    OGR_L_ResetReading($hSrcLayer);
    while (($hFeature = OGR_L_GetNextFeature($hSrcLayer)) != NULL) {
        $hDstFeature = OGR_F_Create(OGR_L_GetLayerDefn($hDstLayer));
        /* Verify if the current feature is corresponding to the feature
           to update the attribute to. If yes, the value corresponding to
           the attribute name selected is substituted. All other attributes
           and geometry are copied as is.  If not, the source feature
           is copied to the destination feature as is.*/
        if ($amAttributeIn && OGR_F_GetFID($hFeature) == $amAttributeIn[0]) {
            for ($i = 0; $i < $iFieldCount; $i++) {
                $hCurrentFieldDefn = OGR_F_GetFieldDefnRef($hFeature, $i);
                $strCurrentFieldName = OGR_FLD_GetNameRef($hCurrentFieldDefn);
                if ($strCurrentFieldName == $amAttributeIn[1]) {
                    $value = $amAttributeIn[2];
                } else {
                    $value = OGR_F_GetFieldAsString($hFeature, $i);
                }
                OGR_F_SetFieldString($hDstFeature, $i, $value);
            }
            $hGeometry = OGR_F_GetGeometryRef($hFeature);
            OGR_F_SetGeometry($hDstFeature, $hGeometry);
        } else {
            if (OGR_F_SetFrom($hDstFeature, $hFeature, FALSE) != OGRERR_NONE) {
                OGR_F_Destroy($hFeature);
                printf("Unable to translate feature %d from layer %s.\n", OGR_F_GetFID($hFeature), OGR_FD_GetName($hFDefn));
                return FALSE;
            }
        }
        OGR_F_Destroy($hFeature);
        if (OGR_L_CreateFeature($hDstLayer, $hDstFeature) != OGRERR_NONE) {
            OGR_F_Destroy($hDstFeature);
            return FALSE;
        }
        OGR_F_Destroy($hDstFeature);
    }
    return TRUE;
}
function TranslateLayer($hSrcDS, $hSrcLayer, $hDstDS)
{
    /* -------------------------------------------------------------------- */
    /*      Create the layer.                                               */
    /* -------------------------------------------------------------------- */
    if (!OGR_DS_TestCapability($hDstDS, ODsCCreateLayer)) {
        printf("%s data source does not support layer creation.\n", OGR_DS_GetName($hDstDS));
        return OGRERR_FAILURE;
    }
    $hFDefn = OGR_L_GetLayerDefn($hSrcLayer);
    /* MapInfo data sources are created with one empty layer corresponding 
       to the $strFname that was passed to the OGR_Dr_CreateDataSource() call.
       Fetch this layer handle now. */
    $hDstLayer = OGR_DS_GetLayer($hDstDS, 0);
    if ($hDstLayer == NULL) {
        return FALSE;
    }
    /* -------------------------------------------------------------------- */
    /*      Add fields.                                                     */
    /* -------------------------------------------------------------------- */
    for ($iField = 0; $iField < OGR_FD_GetFieldCount($hFDefn); $iField++) {
        if (OGR_L_CreateField($hDstLayer, OGR_FD_GetFieldDefn($hFDefn, $iField), 0) != OGRERR_NONE) {
            return FALSE;
        }
    }
    /* -------------------------------------------------------------------- */
    /*      Transfer features.                                              */
    /* -------------------------------------------------------------------- */
    OGR_L_ResetReading($hSrcLayer);
    while (($hFeature = OGR_L_GetNextFeature($hSrcLayer)) != NULL) {
        $hDstFeature = OGR_F_Create(OGR_L_GetLayerDefn($hDstLayer));
        if (OGR_F_SetFrom($hDstFeature, $hFeature, FALSE) != OGRERR_NONE) {
            OGR_F_Destroy($hFeature);
            printf("Unable to translate feature %d from layer %s.\n", OGR_F_GetFID($hFeature), OGR_FD_GetName($hFDefn));
            return FALSE;
        }
        OGR_F_Destroy($hFeature);
        if (OGR_L_CreateFeature($hDstLayer, $hDstFeature) != OGRERR_NONE) {
            OGR_F_Destroy($hDstFeature);
            return FALSE;
        }
        OGR_F_Destroy($hDstFeature);
    }
    return TRUE;
}
Example #5
0
 /**
  * Return layer definition string
  * reads either *.msl file with same base name as data file
  *   or default polygon/line/point.lyr file from plugin dir
  * @return string $layerString
  */
 protected function getLayerDefinition($connParams, $layerSpatialType)
 {
     $ogrDBConn = false;
     if ($connParams['type'] == "generic") {
         $ogrConnectionStr = $this->data_path_prefix . $connParams['layer'];
         //error_log($ogrConnectionStr);
         // $layerDefFile = dirname(__FILE__) . "/" . $connParams['layer'] . ".msl";   ## swap comment if layer definition file in plugin dir
         $layerDefFile = $ogrConnectionStr . ".msl";
     } else {
         $ogrConnectionStr = "PG: " . $connParams['connection'];
         $layerDefFile = dirname(__FILE__) . "/layerdefinition/" . $connParams['schema'] . "." . $connParams['layer'] . ".msl";
         //$layerDefFile = dirname(__FILE__) . "/layerdefinition/" . $connParams['layer'] . ".msl";
     }
     if ($layerSpatialType == "vector") {
         if (!file_exists($ogrConnectionStr) && $connParams['type'] == "generic") {
             error_log($ogrConnectionStr . " does not exist.");
             return null;
         }
         // Register all drivers
         OGRRegisterAll();
         // Open data source
         $hSFDriver = NULL;
         $hDatasource = OGROpen($ogrConnectionStr, 0, $hSFDriver);
         if (!$hDatasource) {
             error_log("Unable to open %s\n" . $ogrConnectionStr);
             return 0;
         }
         if ($connParams['type'] == "generic") {
             $hLayer = OGR_DS_GetLayer($hDatasource, 0);
         } else {
             $hLayer = OGR_DS_GetLayerByName($hDatasource, $connParams['schema'] . "." . $connParams['layer']);
         }
         /* Dump info about this layer */
         $hLayerDefn = OGR_L_GetLayerDefn($hLayer);
         $hFeature = OGR_L_GetNextFeature($hLayer);
         if (OGR_F_GetGeometryRef($hFeature) != NULL) {
             $hGeom = OGR_F_GetGeometryRef($hFeature);
             //$geomType = OGR_G_GetGeometryType($hGeom);
             $geomNameOGR = OGR_G_GetGeometryName($hGeom);
         }
         /* Close data source */
         OGR_DS_Destroy($hDatasource);
         /*$geomList[1] = "point";
           $geomList[2] = "line";
           $geomList[3] = "polygon";
           $geomList[6] = "polygon";*/
         $geomList["POINT"] = "point";
         $geomList["MULTIPOINT"] = "point";
         $geomList["LINESTRING"] = "line";
         $geomList["MULTILINESTRING"] = "line";
         $geomList["POLYGON"] = "polygon";
         $geomList["MULTIPOLYGON"] = "polygon";
         //            $geomName = $geomList[$geomType];
         $geomName = $geomList[$geomNameOGR];
     } else {
         $geomName = "raster";
     }
     if (is_file($layerDefFile)) {
         //if (is_file($layerDefFile = $layerFilename . ".msl")) {
         $layerString = file_get_contents($layerDefFile);
     } else {
         $layerPath = dirname(__FILE__) . "/layerdefinition/{$geomName}.lyr";
         $layerString = file_get_contents($layerPath);
     }
     //error_log("layerDefFile: $layerDefFile");
     return $layerString;
 }
 function get_source_layer($layer_name)
 {
     OGRRegisterAll();
     $src_layer = NULL;
     $src_driver = NULL;
     $this->ogr_src_ds = OGROpen($layer_name, FALSE, $src_driver);
     // shapefiles only have one layer
     // i.e the second arg which is the index
     // of the layer is 0 => layer[0]
     if ($this->ogr_src_ds != NULL) {
         return OGR_DS_GetLayer($this->ogr_src_ds, 0);
     }
 }
// Open data source
$hSFDriver = NULL;
$hDatasource = OGROpen($strfilename, 0, $hSFDriver);
printf("\nDatasource = ");
print_r($hDatasource);
printf("\nSFDriver = ");
print_r($hSFDriver);
if (!$hDatasource) {
    printf("Unable to open %s\n", $strfilename);
    return -1;
}
/* Loop through layers and dump their contents */
$numLayers = OGR_DS_GetLayerCount($hDatasource);
printf("\nLayers count = %s\n", $numLayers);
for ($i = 0; $i < $numLayers; $i++) {
    $hLayer = OGR_DS_GetLayer($hDatasource, $i);
    /* Dump info about this layer */
    $hLayerDefn = OGR_L_GetLayerDefn($hLayer);
    $numFields = OGR_FD_GetFieldCount($hLayerDefn);
    printf("\n===================\n");
    printf("Layer %d: '%s'\n\n", i, OGR_FD_GetName($hLayerDefn));
    for ($j = 0; $j < $numFields; $j++) {
        $hFieldDefn = OGR_FD_GetFieldDefn($hLayerDefn, $j);
        printf(" Field %d: %s (%s)\n", $j, OGR_Fld_GetNameRef($hFieldDefn), OGR_GetFieldTypeName(OGR_Fld_GetType($hFieldDefn)));
    }
    printf("\n");
    printf("Feature(s) count= %d", OGR_L_GetFeatureCount($hLayer, TRUE));
    printf("\n\n");
    /* And dump each feature individually */
    while (($hFeature = OGR_L_GetNextFeature($hLayer)) != NULL) {
        OGR_F_DumpReadable($hFeature);
Example #8
0
 /**
  *
  * Função que transforma o arquivo num formato qualquer para formato conhecido
  *
  * @param string $inputFile
  * @param string $outputFile
  * @param string $outputFormat
  * @param array  $options
  */
 public function ogrToOgr($inputFile, $outputFile, $outputFormat = 'KML', $options = NULL)
 {
     // pega todos os formatos disponíveis no GDAL / OGR
     OGRRegisterAll();
     $astrLayers = NULL;
     $hSFDriver = NULL;
     $hDS = OGROpen($inputFile, FALSE, $hSFDriver);
     // erro caso não consiga abrir o arquivo com os drivers disponíveis.
     if ($hDS == NULL) {
         for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
             $drivers[] = OGR_DR_GetName(OGRGetDriver($iDriver));
         }
         return sprintf(static::GEO_UNABLE_OPEN_FILE_DRIVERS, $inputFile, implode(',', $drivers));
     }
     // pega o driver de saída.
     for ($iDriver = 0; $iDriver < OGRGetDriverCount() && $hSFDriver == NULL; $iDriver++) {
         if (!strcasecmp(OGR_DR_GetName(OGRGetDriver($iDriver)), $outputFormat)) {
             $hSFDriver = OGRGetDriver($iDriver);
         }
     }
     // não encontrou driver para saída.
     if ($hSFDriver == NULL) {
         for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
             $drivers[] = OGR_DR_GetName(OGRGetDriver($iDriver));
         }
         return sprintf(static::GEO_FIND_DRIVERS, $outputFormat, implode(',', $drivers));
     }
     // driver de saída não suporta gerar arquivo físico.
     if (!OGR_Dr_TestCapability($hSFDriver, ODrCCreateDataSource)) {
         return sprintf(static::GEO_DRIVER_DONT_SUPORT_IMPORT, $outputFormat);
     }
     // cria o arquivo de saída
     $hODS = OGR_Dr_CreateDataSource($hSFDriver, $outputFile, $options);
     if ($hODS == NULL) {
         return OGRERR_FAILURE;
     }
     // processa cada layer do arquivo
     for ($iLayer = 0; $iLayer < OGR_DS_GetLayerCount($hDS); $iLayer++) {
         $hLayer = OGR_DS_GetLayer($hDS, $iLayer);
         if ($hLayer == NULL) {
             return sprintf(STATIC::GEO_UNABLE_PROCESS_LAYER, $ilayer);
         }
         if (count($astrLayers) == 0 || in_array(OGR_FD_GetName(OGR_L_GetLayerDefn($hLayer)), $astrLayers) != FALSE) {
             if (!$this->translateLayer($hDS, $hLayer, $hODS)) {
                 return OGRERR_FAILURE;
             }
         }
     }
     OGR_DS_Destroy($hDS);
     OGR_DS_Destroy($hODS);
     return NULL;
 }
function OGR2OGR_main()
{
    $strFormat = "ESRI Shapefile";
    $strDataSource = NULL;
    $strDestDataSource = NULL;
    $astrLayers = NULL;
    /* -------------------------------------------------------------------- */
    /*      Register format(s).                                             */
    /* -------------------------------------------------------------------- */
    OGRRegisterAll();
    /* -------------------------------------------------------------------- */
    /*      Processing command line arguments.                              */
    /* -------------------------------------------------------------------- */
    $numArgs = count($_SERVER["argv"]);
    for ($iArg = 1; $iArg < $numArgs; $iArg++) {
        if (!strcasecmp($_SERVER["argv"][$iArg], "-f") && $iArg < $numArgs - 1) {
            $strFormat = $_SERVER["argv"][++$iArg];
            printf("Format = %s\n", $strFormat);
        } else {
            if ($_SERVER["argv"][$iArg][0] == '-') {
                Usage();
            } else {
                if ($strDestDataSource == NULL) {
                    $strDestDataSource = $_SERVER["argv"][$iArg];
                    printf("DestDataSource = %s\n", $strDestDataSource);
                } else {
                    if ($strDataSource == NULL) {
                        $strDataSource = $_SERVER["argv"][$iArg];
                        printf("DataSource = %s\n", $strDataSource);
                    } else {
                        $astrLayers[] = $_SERVER["argv"][$iArg];
                    }
                }
            }
        }
    }
    $i = 0;
    while ($astrLayers[$i]) {
        printf("Layers [%d] = %s\n", $i, $astrLayers[$i]);
        $i++;
    }
    if ($strDataSource == NULL) {
        Usage();
    }
    /* -------------------------------------------------------------------- */
    /*      Open data source.                                               */
    /* -------------------------------------------------------------------- */
    $hSFDriver = NULL;
    $hDS = OGROpen($strDataSource, FALSE, $hSFDriver);
    /* -------------------------------------------------------------------- */
    /*      Report failure                                                  */
    /* -------------------------------------------------------------------- */
    if ($hDS == NULL) {
        printf("FAILURE:\nUnable to open datasource `%s' with the following drivers:\n", $strDataSource);
        for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
            printf("  -> %s\n", OGR_DR_GetName(OGRGetDriver($iDriver)));
        }
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Find the output driver.                                         */
    /* -------------------------------------------------------------------- */
    for ($iDriver = 0; $iDriver < OGRGetDriverCount() && $hSFDriver == NULL; $iDriver++) {
        if (!strcasecmp(OGR_DR_GetName(OGRGetDriver($iDriver)), $strFormat)) {
            $hSFDriver = OGRGetDriver($iDriver);
        }
    }
    if ($hSFDriver == NULL) {
        printf("Unable to find driver `%s'.\n", $strFormat);
        printf("The following drivers are available:\n");
        for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
            printf("  -> %s\n", OGR_DR_GetName(OGRGetDriver($iDriver)));
        }
        return OGRERR_FAILURE;
    }
    if (!OGR_Dr_TestCapability($hSFDriver, ODrCCreateDataSource)) {
        printf("%s driver does not support data source creation.\n", $strFormat);
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Create the output data source.                                  */
    /* -------------------------------------------------------------------- */
    /*Uncomment and add options here. */
    /* $aoptions[0] = 'option1';
        $aoptions[1] = 'option2';
        $hODS = OGR_Dr_CreateDataSource( $hSFDriver, $strDestDataSource, $aoptions );
    */
    /* Or use no option.*/
    $hODS = OGR_Dr_CreateDataSource($hSFDriver, $strDestDataSource, NULL);
    if ($hODS == NULL) {
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Process each data source layer.                                 */
    /* -------------------------------------------------------------------- */
    for ($iLayer = 0; $iLayer < OGR_DS_GetLayerCount($hDS); $iLayer++) {
        $hLayer = OGR_DS_GetLayer($hDS, $iLayer);
        if ($hLayer == NULL) {
            printf("FAILURE: Couldn't fetch advertised layer %d!\n", $iLayer);
            return OGRERR_FAILURE;
        }
        if (count($astrLayers) == 0 || in_array(OGR_FD_GetName(OGR_L_GetLayerDefn($hLayer)), $astrLayers) != FALSE) {
            if (!TranslateLayer($hDS, $hLayer, $hODS)) {
                return OGRERR_FAILURE;
            }
        }
    }
    /* -------------------------------------------------------------------- */
    /*      Close down.                                                     */
    /* -------------------------------------------------------------------- */
    OGR_DS_Destroy($hDS);
    OGR_DS_Destroy($hODS);
    return OGRERR_NONE;
}
function ogr2tab_copy_srs()
{
    /*Corresponding MapInfo File driver number.*/
    $iDriver = 5;
    $strFormat = "MapInfo File";
    /*Path to existing data source to modify to fit user needs.*/
    $strSrcDataSource = "./phpunit_tests/data/tab/mpasabe200/Commune.TAB";
    /*Path to new data source to modify to fit user needs.*/
    $strDestDataSource = "../ogrtests/tmp/output";
    /*New layer name to modify to fit user needs.*/
    $strDestLayerName = "MyNewLayer";
    /*Layer selected to fetch a feature from.  If the data source name in
      $strSrcDataSource is a "tab" file, the layer number, specified by 
      $iLayer, to copy from must be set to zero.  Otherwise the layer 
      number might be any number between 0 and the layer count.*/
    //    $iLayer = 1;
    $iLayer = 0;
    /* -------------------------------------------------------------------- */
    /*      Register format(s).                                             */
    /* -------------------------------------------------------------------- */
    OGRRegisterAll();
    /* -------------------------------------------------------------------- */
    /*      Open the existing data source.                                  */
    /* -------------------------------------------------------------------- */
    $hSFDriver = NULL;
    $hSrcDS = OGROpen($strSrcDataSource, FALSE, $hSFDriver);
    /* -------------------------------------------------------------------- */
    /*      Report failure                                                  */
    /* -------------------------------------------------------------------- */
    if ($hSrcDS == NULL) {
        printf("FAILURE:\nUnable to open datasource `%s'\n", $strSrcDataSource);
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Find the output driver handle.                                  */
    /* -------------------------------------------------------------------- */
    if ($hSFDriver == NULL) {
        $hSFDriver = OGRGetDriver($iDriver);
    }
    if ($hSFDriver == NULL) {
        printf("Unable to find driver `%s'.\n", $strFormat);
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Create the destination data source.                             */
    /* -------------------------------------------------------------------- */
    $hDestDS = OGR_Dr_CreateDataSource($hSFDriver, $strDestDataSource, NULL);
    if ($hDestDS == NULL) {
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Select an existing layer from the existing data source to get   */
    /*      the projection information from.  To modify accordingly to user */
    /*      needs.                                                          */
    /* -------------------------------------------------------------------- */
    if (OGR_DS_GetLayerCount($hSrcDS) > 0) {
        $hSrcLayer = OGR_DS_GetLayer($hSrcDS, $iLayer);
        if ($hSrcLayer == NULL) {
            printf("FAILURE: Couldn't fetch advertised layer %d!\n", $iLayer);
            return OGRERR_FAILURE;
        }
        $hSrcSRS = OGR_L_GetSpatialRef($hSrcLayer);
    }
    /* -------------------------------------------------------------------- */
    /*      Create a new layer based on the existing data source            */
    /*      information.                                                    */
    /* -------------------------------------------------------------------- */
    $hSrcFDefn = OGR_L_GetLayerDefn($hSrcLayer);
    $eType = OGR_FD_GetGeomType($hSrcFDefn);
    $hDestLayer = OGR_DS_CreateLayer($hDestDS, $strDestLayerName, $hSrcSRS, $eType, NULL);
    if ($hDestLayer == NULL) {
        return FALSE;
    }
    /* -------------------------------------------------------------------- */
    /*      Create the field definitions for the new layer based on the     */
    /*      existing field definitions of the source layer.                 */
    /* -------------------------------------------------------------------- */
    for ($iField = 0; $iField < OGR_FD_GetFieldCount($hSrcFDefn); $iField++) {
        if (OGR_L_CreateField($hDestLayer, OGR_FD_GetFieldDefn($hSrcFDefn, $iField), 0) != OGRERR_NONE) {
            return OGRERR_FAILURE;
        }
    }
    /* -------------------------------------------------------------------- */
    /*      Get only one feature on the existing layer and copy it to the   */
    /*      new layer.                                                      */
    /* -------------------------------------------------------------------- */
    OGR_L_ResetReading($hSrcLayer);
    $hSrcFeature = OGR_L_GetNextFeature($hSrcLayer);
    $hDestFeature = OGR_F_Create(OGR_L_GetLayerDefn($hDestLayer));
    if (OGR_F_SetFrom($hDestFeature, $hSrcFeature, FALSE) != OGRERR_NONE) {
        OGR_F_Destroy($hDestFeature);
        printf("Unable to copy feature %d from layer %s.\n", OGR_F_GetFID($hSrcFeature), OGR_FD_GetName($hSrcFDefn));
        return OGRERR_FAILURE;
    }
    OGR_F_Destroy($hSrcFeature);
    if (OGR_L_CreateFeature($hDestLayer, $hDestFeature) != OGRERR_NONE) {
        OGR_F_Destroy($hDestFeature);
        return OGRERR_FAILURE;
    }
    OGR_F_Destroy($hDestFeature);
    /* -------------------------------------------------------------------- */
    /*      Close down.                                                     */
    /* -------------------------------------------------------------------- */
    OGR_DS_Destroy($hSrcDS);
    OGR_DS_Destroy($hDestDS);
    return OGRERR_NONE;
}
function OGR_SpatialFilter_main()
{
    /*Assigning initial value.*/
    $strFormat = "ESRI Shapefile";
    $strDataSource = NULL;
    $strDestDataSource = NULL;
    $strWhere = NULL;
    $hSpatialFilter = NULL;
    /* -------------------------------------------------------------------- */
    /*      Register format(s).                                             */
    /* -------------------------------------------------------------------- */
    OGRRegisterAll();
    /* -------------------------------------------------------------------- */
    /*      Processing command line arguments.                              */
    /* -------------------------------------------------------------------- */
    $numArgs = count($_SERVER["argv"]);
    for ($iArg = 1; $iArg < $numArgs; $iArg++) {
        if (!strcasecmp($_SERVER["argv"][$iArg], "-f") && $iArg < $numArgs - 1) {
            $strFormat = $_SERVER["argv"][++$iArg];
            printf("Format = %s\n", $strFormat);
        } else {
            if ($_SERVER["argv"][$iArg] == "-spat" && $_SERVER["argv"][$iArg + 1] != NULL && $_SERVER["argv"][$iArg + 2] != NULL && $_SERVER["argv"][$iArg + 3] != NULL && $_SERVER["argv"][$iArg + 4] != NULL) {
                $hSpatialFilter = OGR_G_CreateGeometry(wkbLinearRing);
                OGR_G_AddPoint($hSpatialFilter, floatval($_SERVER["argv"][$iArg + 1]), floatval($_SERVER["argv"][$iArg + 2]), 0.0);
                OGR_G_AddPoint($hSpatialFilter, floatval($_SERVER["argv"][$iArg + 1]), floatval($_SERVER["argv"][$iArg + 4]), 0.0);
                OGR_G_AddPoint($hSpatialFilter, floatval($_SERVER["argv"][$iArg + 3]), floatval($_SERVER["argv"][$iArg + 4]), 0.0);
                OGR_G_AddPoint($hSpatialFilter, floatval($_SERVER["argv"][$iArg + 3]), floatval($_SERVER["argv"][$iArg + 2]), 0.0);
                OGR_G_AddPoint($hSpatialFilter, floatval($_SERVER["argv"][$iArg + 1]), floatval($_SERVER["argv"][$iArg + 2]), 0.0);
                printf("Xmin = %s Ymin = %s Xmax = %s Ymax = %s\n", $_SERVER["argv"][$iArg + 1], $_SERVER["argv"][$iArg + 2], $_SERVER["argv"][$iArg + 3], $_SERVER["argv"][$iArg + 4]);
                $iArg += 4;
            } else {
                if ($_SERVER["argv"][$iArg] == "-where" && $_SERVER["argv"][$iArg + 1] != NULL) {
                    $strWhere = $_SERVER["argv"][++$iArg];
                    printf("where = %s\n", $strWhere);
                } else {
                    if ($_SERVER["argv"][$iArg][0] == '-') {
                        Usage();
                    } else {
                        if ($strDestDataSource == NULL) {
                            $strDestDataSource = $_SERVER["argv"][$iArg];
                            printf("DestDataSource = %s\n", $strDestDataSource);
                        } else {
                            if ($strDataSource == NULL) {
                                $strDataSource = $_SERVER["argv"][$iArg];
                                printf("DataSource = %s\n", $strDataSource);
                            }
                        }
                    }
                }
            }
        }
    }
    if ($strDataSource == NULL) {
        Usage();
    }
    /* -------------------------------------------------------------------- */
    /*      Open data source.                                               */
    /* -------------------------------------------------------------------- */
    $hSFDriver = NULL;
    $hDS = OGROpen($strDataSource, FALSE, $hSFDriver);
    /* -------------------------------------------------------------------- */
    /*      Report failure                                                  */
    /* -------------------------------------------------------------------- */
    if ($hDS == NULL) {
        printf("FAILURE:\nUnable to open datasource `%s' with the following drivers:\n", $strDataSource);
        for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
            printf("  -> %s\n", OGR_DR_GetName(OGRGetDriver($iDriver)));
        }
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Find the output driver.                                         */
    /* -------------------------------------------------------------------- */
    for ($iDriver = 0; $iDriver < OGRGetDriverCount() && $hSFDriver == NULL; $iDriver++) {
        if (!strcasecmp(OGR_DR_GetName(OGRGetDriver($iDriver)), $strFormat)) {
            $hSFDriver = OGRGetDriver($iDriver);
        }
    }
    if ($hSFDriver == NULL) {
        printf("Unable to find driver `%s'.\n", $strFormat);
        printf("The following drivers are available:\n");
        for ($iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++) {
            printf("  -> %s\n", OGR_DR_GetName(OGRGetDriver($iDriver)));
        }
        return OGRERR_FAILURE;
    }
    if (!OGR_Dr_TestCapability($hSFDriver, ODrCCreateDataSource)) {
        printf("%s driver does not support data source creation.\n", $strFormat);
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Create the output data source.                                  */
    /* -------------------------------------------------------------------- */
    /*Uncomment and add options here. */
    /* $aoptions[0] = 'option1';
        $aoptions[1] = 'option2';
        $hODS = OGR_Dr_CreateDataSource( $hSFDriver, $strDestDataSource, $aoptions );
    */
    /* Or use no option.*/
    $hODS = OGR_Dr_CreateDataSource($hSFDriver, $strDestDataSource, NULL);
    if ($hODS == NULL) {
        return OGRERR_FAILURE;
    }
    /* -------------------------------------------------------------------- */
    /*      Process each data source layer.                                 */
    /* -------------------------------------------------------------------- */
    for ($iLayer = 0; $iLayer < OGR_DS_GetLayerCount($hDS); $iLayer++) {
        $hLayer = OGR_DS_GetLayer($hDS, $iLayer);
        if ($hLayer == NULL) {
            printf("FAILURE: Couldn't fetch advertised layer %d!\n", $iLayer);
            return OGRERR_FAILURE;
        }
        if (count($astrLayers) == 0 || in_array(OGR_FD_GetName(OGR_L_GetLayerDefn($hLayer)), $astrLayers) != FALSE) {
            /*Assign spatial filter*/
            if ($hSpatialFilter != NULL) {
                OGR_L_SetSpatialFilter($hLayer, $hSpatialFilter);
            }
            /*Assign attribute filter*/
            if ($strWhere != NULL) {
                $eErr = OGR_L_SetAttributeFilter($hLayer, $strWhere);
            }
            if ($eErr != OGRERR_NONE) {
                printf("Erreur when setting attribute filter", $eErr);
                return $eErr;
            }
            /*Copy datasource file to a new data source file*/
            if (!TranslateLayer($hDS, $hLayer, $hODS)) {
                return OGRERR_FAILURE;
            }
        }
    }
    /* -------------------------------------------------------------------- */
    /*      Close down.                                                     */
    /* -------------------------------------------------------------------- */
    OGR_DS_Destroy($hDS);
    OGR_DS_Destroy($hODS);
    return OGRERR_NONE;
}
     echo "Could not open src shape file";
 } else {
     $dst_layer = "";
     $dst_layer_name = "";
     $dst_attr_table_name = "";
     $dst_driver = NULL;
     /* change this so that the connection info is read from class_dbconn.php */
     $dst_ds = OGROpen("PG:host=142.207.144.71 dbname=tng_dev user=tng_readwrite password=tng_readwrite", FALSE, $dst_driver);
     if ($dst_ds == NULL) {
         echo "could not open dest.";
         exit;
     }
     echo "shapefile opened, postgres source opened";
     // shapefiles only have one layer, so
     // the second arg to GetLayer is 0.
     $src_layer = OGR_DS_GetLayer($src_ds, 0);
     if ($src_layer == NULL) {
         echo "could not open source layer";
         return;
     }
     $feature_defn = OGR_L_GetLayerDefn($src_layer);
     /*---------------------------------------------------------------------------------------*/
     /* this is done to find out the geometry type only - should be moved to its own function */
     $feature = OGR_L_GetNextFeature($src_layer);
     $geometry = OGR_F_GetGeometryRef($feature);
     $geom_type = strtolower(OGR_G_GetGeometryName($geometry));
     // execute sql command using form id to find out spatial table name and attribute table
     // namme
     $sql_str = "SELECT " . "tng_spatial_data.table_name, " . "tng_spatial_attribute_table.attr_table_name " . "FROM " . "tng_form_spatial_data " . "INNER JOIN tng_spatial_data ON tng_form_spatial_data.spatial_table_id = tng_spatial_data.spatial_table_id " . "INNER JOIN tng_spatial_attribute_table on tng_form_spatial_data.spatial_table_id = tng_spatial_attribute_table.spatial_table_id " . "WHERE " . "tng_form_spatial_data.form_id = 1 " . "AND " . "tng_spatial_data.geometry_type = '" . $geom_type . "'";
     $dbconn = new DBConn();
     $dbconn->connect();