function __construct($driverName, $exportExt, $json, $map, $bExportAtt = false, $optDataSourceCreation = NULL, $bSearchSpatialRef = false) { $bOk = false; $msVersion = null; // MapServer version $groups = null; // Layers list that will be exported parent::__construct($json); OGRRegisterAll(); // looking for destination driver for ($iDriver = 0; $iDriver < OGRGetDriverCount() && !$bOk; $iDriver++) { if (!strcasecmp(OGR_DR_GetName(OGRGetDriver($iDriver)), $driverName)) { $this->driverOGRDest = OGRGetDriver($iDriver); $bOk = true; break; } } if ($bOk) { // is it possible to create new data source with current driver if (!OGR_Dr_TestCapability($this->driverOGRDest, ODrCCreateDataSource)) { $this->driverOGRDest = null; $bOk = false; return; } } if ($bOk) { $msVersion = $_SESSION['MS_VERSION']; $groups = (array) $this->jsonList[0]; // Create the destination directory @mkdir($this->tempFilePath, 0700); // for each layers that will be exported foreach ($groups as $grp) { $baseDest = null; $layerList = array(); $attNameList = $grp->header; $ObjList = $grp->values; if (!$ObjList[0][0]->shplink) { continue; } // if we need to export attributs if ($bExportAtt) { include_once '../common/pluginsMapUtils.inc.php'; for ($iAtt = 0; $iAtt < count($attNameList); $iAtt++) { if ($attNameList[$iAtt] == '@') { array_splice($attNameList, $iAtt, 1); $iAtt--; continue; } // remove accents and spaces: $newAttName = PluginsMapUtils::decodeMapFileVal($map, $attNameList[$iAtt], 'UTF-8'); $newAttName = str_replace($this->bad, $this->good, $attNameList[$iAtt]); if (is_numeric($newAttName[0])) { $newAttName = 'z' . $newAttName; } $attNameList[$iAtt] = $newAttName; } } // for each objects that we want to export foreach ($ObjList as $Obj) { $layerSrc = null; // Source layer $layerDest = null; // Destination layer $baseDest = null; // Destination DataBase $geoType = 0; $shpLink = $Obj[0]->shplink; $layerName = $shpLink[0]; $IdObj = $shpLink[1]; // if it's the first time we found current layer if (!isset($layerList[$layerName])) { // getting mapserver layer $layerSrc = $map->getLayerByName($layerName); // use layers with complex queries that are too long to select results $newdata = $layerSrc->getMetaData('PM_RESULT_DATASUBSTITION'); if ($newdata != '') { $layerSrc->set('data', $newdata); } // create destination data base $output = $this->tempFilePath . "\\{$layerName}.{$exportExt}"; $output = str_replace('/', '\\', $output); $baseDest = OGR_Dr_CreateDataSource($this->driverOGRDest, $output, $optDataSourceCreation); if (!$baseDest) { continue; } // is it possible to create new layers in current data source ? if (!OGR_DS_TestCapability($baseDest, ODsCCreateLayer)) { if ($baseDest) { OGR_DS_Destroy($baseDest); } continue; } // create new layer in the destination data base $geoType = $this->typeList[$layerSrc->type]; $layerDest = $this->createNewLayer($map, $baseDest, $layerName, $geoType, $bSearchSpatialRef); // add new attribut in destination layer if ($bExportAtt) { $idAtt = 0; foreach ($attNameList as $attName) { $att = OGR_Fld_Create($attName, OFTString); OGR_L_CreateField($layerDest, $att, $idAtt); $idAtt++; } } // saving all in layerList $layerList[$layerName] = array(); $layerList[$layerName][] = $layerSrc; $layerList[$layerName][] = $baseDest; $layerList[$layerName][] = $layerDest; $layerList[$layerName][] = $geoType; // add file to files list will be exorted $this->addFileToFileList($output); } else { $layerSrc = $layerList[$layerName][0]; $baseDest = $layerList[$layerName][1]; $layerDest = $layerList[$layerName][2]; $geoType = $layerList[$layerName][3]; } // gettint shape object $srcShp = PMCommon::resultGetShape($msVersion, $layerSrc, null, $IdObj, -1); // export geometry of the object in WKT $geoWKT = $srcShp->toWkt(); // create new geometry OGR object from WKT geometry $geoOGR = $this->createNewOGRGeometry($geoWKT); // create new data line on destination layer $layerDestDefn = OGR_L_GetLayerDefn($layerDest); $Data = OGR_F_Create($layerDestDefn); // add geometry in data line OGR_F_SetGeometry($Data, $geoOGR); // if we need to export attributs if ($bExportAtt) { // add attributs values in data line for ($iAtt = 1; $iAtt < count($Obj); $iAtt++) { $newAttVal = PluginsMapUtils::decodeLayerVal($map, $layerName, $Obj[$iAtt], 'UTF-8'); OGR_F_SetFieldString($Data, $iAtt - 1 + $this->nbFieldBase, $newAttVal); } } $this->insertSpecialFields($geoType, $layerDestDefn, $Data); // add data line in destination layer OGR_L_CreateFeature($layerDest, $Data); OGR_F_Destroy($Data); OGR_G_DestroyGeometry($geoOGR); } foreach ($layerList as $l) { if (isset($l[1]) && $l[1]) { OGR_DS_Destroy($l[1]); } } } // files compression $this->zipFiles(); // remove directory rmdir($this->tempFilePath); } }
function OGR2Tab_Update_main() { $strFormat = "MapInfo File"; $strDataSource = NULL; $strDestDataSource = NULL; $amAttribute = NULL; /* -------------------------------------------------------------------- */ /* Register format(s). */ /* -------------------------------------------------------------------- */ OGRRegisterAll(); /* -------------------------------------------------------------------- */ /* Processing command line arguments. */ /* -------------------------------------------------------------------- */ $numArgs = count($_SERVER["argv"]); for ($iArg = 1; $iArg < $numArgs; $iArg++) { /* Get the feature id and attribute name to update to the new attribute value.*/ if (!strcasecmp($_SERVER["argv"][$iArg], "-fid") && $iArg < $numArgs - 1) { $amAttribute[0] = $_SERVER["argv"][++$iArg]; $amAttribute[1] = $_SERVER["argv"][++$iArg]; $amAttribute[2] = $_SERVER["argv"][++$iArg]; printf("FID = %d\n", $amAttribute[0]); printf("Attribute name = %s\n", $amAttribute[1]); printf("Attribute value = %d\n", $amAttribute[2]); } 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 only first layer in source dataset */ /* -------------------------------------------------------------------- */ if (OGR_DS_GetLayerCount($hDS) > 0) { $hLayer = OGR_DS_GetLayer($hDS, 0); if ($hLayer == NULL) { printf("FAILURE: Couldn't fetch advertised layer 0!\n"); return OGRERR_FAILURE; } if (!TranslateLayer($hDS, $hLayer, $hODS, $amAttribute)) { return OGRERR_FAILURE; } } /* -------------------------------------------------------------------- */ /* Close down. */ /* -------------------------------------------------------------------- */ OGR_DS_Destroy($hDS); OGR_DS_Destroy($hODS); return OGRERR_NONE; }
function OGR2Tab_SQL_main() { /*Assigning initial value.*/ $strFormat = "MapInfo File"; $strDataSource = NULL; $strDestDataSource = NULL; $strWhere = NULL; $hSpatialFilter = NULL; $strSQLStatement = NULL; $strDialect = NULL; /* -------------------------------------------------------------------- */ /* Register format(s). */ /* -------------------------------------------------------------------- */ OGRRegisterAll(); /* -------------------------------------------------------------------- */ /* Processing command line arguments. */ /* -------------------------------------------------------------------- */ $numArgs = count($_SERVER["argv"]); for ($iArg = 1; $iArg < $numArgs; $iArg++) { /* Construct a spatial filter.*/ 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] == "-sql" && $_SERVER["argv"][$iArg + 1] != NULL) { $strSQLStatement = $_SERVER["argv"][++$iArg]; printf("SQLStatement = %s\n", $strSQLStatement); } 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 { if ($_SERVER["argv"][$iArg][0] == '-') { Usage(); } } } } } } 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; } /* -------------------------------------------------------------------- */ /* Fetch source layer using SQL statement. */ /* -------------------------------------------------------------------- */ $hLayer = OGR_DS_ExecuteSQL($hDS, $strSQLStatement, $hSpatialFilter, NULL); /*Copy datasource file to a new data source file*/ if ($hLayer != NULL) { if (!TranslateLayer($hDS, $hLayer, $hODS)) { return OGRERR_FAILURE; } OGR_DS_ReleaseResultSet($hDS, $hLayer); } /* -------------------------------------------------------------------- */ /* Close down. */ /* -------------------------------------------------------------------- */ OGR_DS_Destroy($hDS); OGR_DS_Destroy($hODS); return OGRERR_NONE; }
/** * * 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 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; }