function OGRSetGetString($hFeatureIn, $iField, $value)
{
    /*Assigning a string value to the field to the field "0".*/
    OGR_F_SetFieldString($hFeatureIn, $iField, $value);
    /*Retrieving the field value. */
    $value = OGR_F_GetFieldAsString($hFeatureIn, $iField);
    printf("String value = %s\n", $value);
    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 OGR_F_DumpReadable($hFeature)
{
    $hFeatureDefn = OGR_F_GetDefnRef($hFeature);
    printf("OGRFeature(%s):%ld\n", OGR_FD_GetName($hFeatureDefn), OGR_F_GetFID($hFeature));
    $numFields = OGR_FD_GetFieldCount($hFeatureDefn);
    for ($iField = 0; $iField < $numFields; $iField++) {
        $hFieldDefn = OGR_FD_GetFieldDefn($hFeatureDefn, $iField);
        printf("  %s (%s) = ", OGR_FLD_GetNameRef($hFieldDefn), OGR_GetFieldTypeName(OGR_FLD_GetType($hFieldDefn)));
        if (OGR_F_IsFieldSet($hFeature, $iField)) {
            printf("%s\n", OGR_F_GetFieldAsString($hFeature, $iField));
        } else {
            printf("(null)\n");
        }
    }
    if (OGR_F_GetStyleString($hFeature) != NULL) {
        printf("  Style = %s\n", OGR_F_GetStyleString($hFeature));
    }
    if (OGR_F_GetGeometryRef($hFeature) != NULL) {
        OGR_G_DumpReadable(OGR_F_GetGeometryRef($hFeature));
    }
    printf("\n");
}
 function add_attributes_to_db($src_feature, $feature_id, $fk_col_name)
 {
     $success = false;
     $num_fields = OGR_F_GetFieldCount($src_feature);
     $sql_str = "INSERT INTO " . $this->attr_table_name . "(" . $fk_col_name . ", ";
     // append all field names to the
     // sql string first
     for ($i = 0; $i < $num_fields; $i++) {
         $field_defn = OGR_FD_GetFieldDefn(OGR_L_GetLayerDefn($this->ogr_src_layer), $i);
         $f_name = strtolower(OGR_Fld_GetNameRef($field_defn));
         $sql_str .= $f_name;
         if ($i < $num_fields - 1) {
             $sql_str .= ", ";
         }
     }
     $sql_str .= ") VALUES ( " . $feature_id . ", ";
     // append field values
     for ($i = 0; $i < $num_fields; $i++) {
         $field_defn = OGR_FD_GetFieldDefn(OGR_L_GetLayerDefn($this->ogr_src_layer), $i);
         $f_name = strtolower(OGR_Fld_GetNameRef($field_defn));
         $f_type = OGR_Fld_GetType($field_defn);
         $f_value = OGR_F_GetFieldAsString($src_feature, $i);
         // surround the value with quotes if
         // the type is string
         if ($f_type == OFTString) {
             $sql_str .= "'" . str_replace("'", "''", $f_value) . "'";
         } else {
             if ($f_value == "") {
                 $sql_str .= "NULL";
             } else {
                 $sql_str .= $f_value;
             }
         }
         if ($i < $num_fields - 1) {
             $sql_str .= ", ";
         }
     }
     $sql_str .= ")";
     $this->dbconn->connect();
     $result = pg_query($this->dbconn->conn, $sql_str);
     if (!$result) {
         echo "An error occurred while executing the query: " . $sql_str . pg_last_error($this->dbconn->conn) . "\n\n";
     } else {
         $success = true;
     }
     $this->dbconn->disconnect();
     return $success;
 }
                $f_name = strtolower(OGR_Fld_GetNameRef($field_defn));
                $f_type = OGR_Fld_GetType($field_defn);
                if ($f_type == OFTString) {
                    $f_type = "string";
                } else {
                    if ($f_type == OFTInteger) {
                        $f_type = "int";
                    } else {
                        if ($f_type == OFTReal) {
                            $f_type = "double";
                        } else {
                            $f_type = "unknown";
                        }
                    }
                }
                $f_value = OGR_F_GetFieldAsString($dst_feature, $i);
                echo $f_name . ": " . $f_value . "; ";
            }
            echo "<br>";
        }
    }
    //echo OGRGetDriverCount();
    //for( $iDriver = 0; $iDriver < OGRGetDriverCount(); $iDriver++ )
    //{
    //   printf( "  -> %s<br>", OGR_DR_GetName(OGRGetDriver($iDriver)) );
    //}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>